annotate variant_effect_predictor/Bio/AlignIO/clustalw.pm @ 1:d6778b5d8382 draft default tip

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