in reply to Changing the output filehandle while iterating input files.

You can always explicitly iterate over @ARGV:
my @files = @ARGV; for my $fn (@files) { local @ARGV = ($fn); open OUTPUT, '>', "out$fn" or die $!; while (<>) { print OUTPUT $_; } }

That won't work for empty @ARGV, which you'd have to special-case.