my @list = map { my @lines = <$_>; \@lines } @f_handles; # becomes my $next = gen_fh_iterator( \@f_handles ); while ( my $lines = $next->() ) { print @$lines, "\n"; } sub gen_fh_iterator { my $f_handle = shift; my $index = -1; return sub { $index++; return undef if $index > $#f_handle; my @lines = <$f_handle->[$index]>; return \@lines; }; }