use strict; use warnings; sub getNlines { my ($fh,$nLines) = @_; return sub { my $linesRead = 0; my $rec; $rec .= <$fh> for (1..$nLines); return $rec; } } open my $ff, "<", shift @ARGV or die $!; my $get10lines = getNlines($ff,10); ## will retrieve 10 lines per call while (my $rec = $get10lines->()){ ## Process next 10 lines print "$rec\n"; }