{ package Reader; sub new { my ($class, $fh) = @_; my $self = bless([$fh, undef]); } sub get_line { my ($self) = @_; our $fh; local *fh = \($self->[0]); our $buf; local *buf = \($self->[1]); if (!defined($fh)) { return undef; } if (!defined($buf)) { for (;;) { my $line = <$fh>; if (!defined($line)) { undef $fh; return undef; } if ($line =~ /^\d\d:\d\d:\d\d /) { $buf = $line; last; } } } for (;;) { my $line = <$fh>; if (!defined($line)) { undef $fh; return "$buf\n"; } if ($line =~ /^\d\d:\d\d:\d\d /) { return ((undef, $buf) = ($buf, $line))[0]; } chomp($buf); $buf .= $line; } } }