annotate variant_effect_predictor/Bio/AlignIO/clustalw.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: clustalw.pm,v 1.21 2002/10/22 07:38:25 lapp Exp $
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::AlignIO::clustalw
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5 # based on the Bio::SeqIO modules
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 # by Ewan Birney <birney@sanger.ac.uk>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7 # and Lincoln Stein <lstein@cshl.org>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 # and the SimpleAlign.pm module of Ewan Birney
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 # Copyright Peter Schattner
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 # You may distribute this module under the same terms as perl itself
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14 # _history
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15 # September 5, 2000
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16 # POD documentation - main docs before the code
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20 Bio::AlignIO::clustalw - clustalw sequence input/output stream
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24 Do not use this module directly. Use it via the Bio::AlignIO class.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28 This object can transform Bio::Align::AlignI objects to and from clustalw flat
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 file databases.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31 =head1 FEEDBACK
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 =head2 Mailing Lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35 User feedback is an integral part of the evolution of this and other
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36 Bioperl modules. Send your comments and suggestions preferably to one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 of the Bioperl mailing lists. Your participation is much appreciated.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39 bioperl-l@bioperl.org - General discussion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 http://bio.perl.org/MailList.html - About the mailing lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 =head2 Reporting Bugs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45 Report bugs to the Bioperl bug tracking system to help us keep track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46 the bugs and their resolution. Bug reports can be submitted via email
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 or the web:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 bioperl-bugs@bio.perl.org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50 http://bugzilla.bioperl.org/
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52 =head1 AUTHORS - Peter Schattner
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54 Email: schattner@alum.mit.edu
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57 =head1 APPENDIX
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59 The rest of the documentation details each of the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60 methods. Internal methods are usually preceded with a _
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64 # Let the code begin...
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66 package Bio::AlignIO::clustalw;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 use vars qw(@ISA $LINELENGTH);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70 use Bio::AlignIO;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 use Bio::LocatableSeq;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72 use Bio::SimpleAlign; # to be Bio::Align::Simple
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74 $LINELENGTH = 60;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76 @ISA = qw(Bio::AlignIO);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 =head2 new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80 Title : new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81 Usage : $alignio = new Bio::AlignIO(-format => 'clustalw',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82 -file => 'filename');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83 Function: returns a new Bio::AlignIO object to handle clustalw files
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84 Returns : Bio::AlignIO::clustalw object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85 Args : -verbose => verbosity setting (-1,0,1,2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86 -file => name of file to read in or with ">" - writeout
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87 -fh => alternative to -file param - provide a filehandle
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88 to read from/write to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 -format => type of Alignment Format to process or produce
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90 -percentages => (clustalw only) display a percentage of identity
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91 in each line of the alignment.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 -linelength=> Set the alignment output line length (default 60)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 sub _initialize {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98 my ($self, @args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 $self->SUPER::_initialize(@args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 my ($percentages,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 $ll) = $self->_rearrange([qw(PERCENTAGES LINELENGTH)], @args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 defined $percentages && $self->percentages($percentages);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103 $self->line_length($ll || $LINELENGTH);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 =head2 next_aln
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 Title : next_aln
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109 Usage : $aln = $stream->next_aln()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 Function: returns the next alignment in the stream
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111 Returns : Bio::Align::AlignI object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112 Args : NONE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 See L<Bio::Align::AlignI> for details
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 sub next_aln {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 my $first_line;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122 if( defined ($first_line = $self->_readline )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 && $first_line !~ /CLUSTAL/ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 $self->warn("trying to parse a file which does not start with a CLUSTAL header");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126 my %alignments;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 my $aln = Bio::SimpleAlign->new(-source => 'clustalw');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128 my $order = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129 my %order;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 $self->{_lastline} = '';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131 while( defined ($_ = $self->_readline) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 next if ( /^\s+$/ );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 my ($seqname, $aln_line) = ('', '');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135 if( /^\s*(\S+)\s*\/\s*(\d+)-(\d+)\s+(\S+)\s*$/ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136 # clustal 1.4 format
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137 ($seqname,$aln_line) = ("$1:$2-$3",$4);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138 } elsif( /^(\S+)\s+([A-Z\-]+)\s*$/ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 ($seqname,$aln_line) = ($1,$2);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140 } else { $self->{_lastline} = $_; next }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 if( !exists $order{$seqname} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143 $order{$seqname} = $order++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 $alignments{$seqname} .= $aln_line;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 my ($sname,$start,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149 foreach my $name ( sort { $order{$a} <=> $order{$b} } keys %alignments ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 if( $name =~ /(\S+):(\d+)-(\d+)/ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151 ($sname,$start,$end) = ($1,$2,$3);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 ($sname, $start) = ($name,1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154 my $str = $alignments{$name};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155 $str =~ s/[^A-Za-z]//g;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156 $end = length($str);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158 my $seq = new Bio::LocatableSeq('-seq' => $alignments{$name},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 '-id' => $sname,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160 '-start' => $start,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 '-end' => $end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162 $aln->add_seq($seq);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164 undef $aln if( !defined $end || $end <= 0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165 return $aln;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 =head2 write_aln
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 Title : write_aln
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 Usage : $stream->write_aln(@aln)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 Function: writes the clustalw-format object (.aln) into the stream
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173 Returns : 1 for success and 0 for error
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174 Args : L<Bio::Align::AlignI> object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179 sub write_aln {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 my ($self,@aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 my ($count,$length,$seq,@seq,$tempcount,$line_len);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182 $line_len = $self->line_length || $LINELENGTH;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 foreach my $aln (@aln) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184 if( ! $aln || ! $aln->isa('Bio::Align::AlignI') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185 $self->warn("Must provide a Bio::Align::AlignI object when calling write_aln");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186 next;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 my $matchline = $aln->match_line;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 $self->_print (sprintf("CLUSTAL W(1.81) multiple sequence alignment\n\n\n")) or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192 $length = $aln->length();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 $count = $tempcount = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 @seq = $aln->each_seq();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 my $max = 22;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196 foreach $seq ( @seq ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197 $max = length ($aln->displayname($seq->get_nse()))
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198 if( length ($aln->displayname($seq->get_nse())) > $max );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200 while( $count < $length ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201 foreach $seq ( @seq ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 # Following lines are to suppress warnings
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204 # if some sequences in the alignment are much longer than others.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206 my ($substring);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207 my $seqchars = $seq->seq();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208 SWITCH: {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 if (length($seqchars) >= ($count + $line_len)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 $substring = substr($seqchars,$count,$line_len);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211 last SWITCH;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212 } elsif (length($seqchars) >= $count) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213 $substring = substr($seqchars,$count);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214 last SWITCH;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216 $substring = "";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 $self->_print (sprintf("%-".$max."s %s\n",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 $aln->displayname($seq->get_nse()),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221 $substring)) or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 my $linesubstr = substr($matchline, $count,$line_len);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225 my $percentages = '';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226 if( $self->percentages ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227 my ($strcpy) = ($linesubstr);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228 my $count = ($strcpy =~ tr/\*//);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229 $percentages = sprintf("\t%d%%", 100 * ($count / length($linesubstr)));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 $self->_print (sprintf("%-".$max."s %s%s\n", '', $linesubstr,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232 $percentages));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233 $self->_print (sprintf("\n\n")) or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 $count += $line_len;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237 $self->flush if $self->_flush_on_write && defined $self->_fh;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 return 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241 =head2 percentages
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 Title : percentages
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 Usage : $obj->percentages($newval)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245 Function: Set the percentages flag - whether or not to show percentages in
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246 each output line
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 Returns : value of percentages
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 Args : newvalue (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 sub percentages {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255 if( defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256 $self->{'_percentages'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258 return $self->{'_percentages'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 =head2 line_length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 Title : line_length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264 Usage : $obj->line_length($newval)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265 Function: Set the alignment output line length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266 Returns : value of line_length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267 Args : newvalue (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 sub line_length {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274 if( defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275 $self->{'_line_length'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277 return $self->{'_line_length'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280 1;