package My::Package; my $datafile = '/path/to/data.txt'; # each line in file has a numbered key ($key) followed by # some data. file is sorted based on incrementing keys sub itter_maker { # return a function that passes back # data only from lines with keys between # $min and $max my $min = shift; my $max = shift; my $done; my $fh = new IO::File "$datafile"; return( sub { return if $done; my (@data,$row,$key); while (1) { chomp($row = <$fh>) or last; #### # [SNIPPED] munge $row, set $key and @data #### next if $key < $min; $done = 1 && return if ($key > $max); last; } return ($key,\@data); }); }