A basic challenge of iterators
sub mymap(@list, &block) { my @result; while @list { push @result, &block(@list.shift); } @result; } my @lines = $file.lines; mymap(@lines, &block);
What happens to @lines after the call to mymap?
It's emptied by the repeated shifts.
The programmer likely didn't intend or expect this.
The problem is akin to "bound" versus "unbound" lists.