package Tie::Handle::MultiRec; use Carp; sub TIEHANDLE { my $pkg = shift; my $fn = shift; my $irs = shift || "\n"; my $n = shift || 1; my $fh = *main::STDIN; # default $fn and open $fh, "<", $fn or croak "read $fn - $!\n"; bless { readline => sub { local $/ = $irs; my $s; for ( 1 .. $n ) { eof($fh) and return $s; $s .= <$fh>; } $s }, n => sub { @_ and $n = shift; $n }, print => sub { for (@_) { /^N\w*=(\d+)/mi and $n = $1; /^I\w*="(.*?)"/msi and $irs = $1; } }, }, $pkg; } sub READLINE { $_[0]{'readline'}->() } sub N { $_[0]{'n'}->($_[1]) } sub PRINT { my $self = shift; $self->{'print'}->(@_); }