sub collect { join '', map { open my $fh, '<', $_ or warn "Can't open `$_': $!\n"; <$fh>; } @_; } #### picard:~/tmp [11:26:38]$ perl -v | head -n 2 This is perl, v5.10.0 built for i486-linux-gnu-thread-multi picard:~/tmp [11:26:42]$ cat ../domk.pl #!/usr/bin/perl use strict; use warnings; while (<>) { chomp; print "huzzah:".collect( $_ )."!\n"; } sub collect { local *ARGV; @ARGV = @_; join '', <>; } __END__ picard:~/tmp [11:26:55]$ ls file? | ../domk.pl Can't open file1: No such file or directory at ../domk.pl line 14. huzzah:! Can't open file2: No such file or directory at ../domk.pl line 14. huzzah:! Can't open : No such file or directory at ../domk.pl line 14. huzzah:! #### #!/usr/bin/perl use strict; use warnings; use Test::More 'no_plan'; sub dargv { local *ARGV; @ARGV = @_; <>; } sub dopen { map { open my $fh, '<', $_ or warn "Can't open `$_': $!\n"; <$fh>; } @_; } while (<>) { chomp; is_deeply [dargv $_], [dopen $_] => $_; } __END__