From: "Gustavo L. de M. Chaves" <gnustavo@xxxxxxxx> Git::activestate_pipe::TIEHANDLE creates an object to keep the external command's output as an array of lines. The object also kept an index into the array to know up to which line had already been read via Git::activestate_pipe::READLINE. We don't really need that index because lines already read don't need to be kept. So, we simply unshift lines as they're being read and use the array's size to know when we have read all lines. This implementation uses more idiomatic Perl, which makes it more readable and probably a little bit faster. Signed-off-by: Gustavo L. de M. Chaves <gnustavo@xxxxxxxx> --- perl/Git.pm | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/perl/Git.pm b/perl/Git.pm index 42c3971..2d88b89 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -1402,33 +1402,28 @@ sub TIEHANDLE { # should take care of the most common cases. my @escaped_params = map { "\"$_\"" } map { s/"/""/g; $_ } @params; my @data = qx{git @escaped_params}; - bless { i => 0, data => \@data, exit => $? }, $class; + bless { data => \@data, exit => $? }, $class; } sub READLINE { my $self = shift; - if ($self->{i} >= scalar @{$self->{data}}) { - return undef; - } - my $i = $self->{i}; + return unless @{$self->{data}}; if (wantarray) { - $self->{i} = $#{$self->{'data'}} + 1; - return splice(@{$self->{'data'}}, $i); + return splice @{$self->{data}}; + } else { + return shift @{$self->{data}}; } - $self->{i} = $i + 1; - return $self->{'data'}->[ $i ]; } sub CLOSE { my $self = shift; delete $self->{data}; - delete $self->{i}; return $self->{exit} == 0; } sub EOF { my $self = shift; - return ($self->{i} >= scalar @{$self->{data}}); + return @{$self->{data}} == 0; } -- 1.7.12.464.g83379df.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html