Seems like there are just bugs related to altering function arguments, perhaps when they also refer to more global variables, and maybe especially @ARGV. E.g. (copied and modified from
bizarre Carp - also I posted a
patch in that thread):
use Carp;
Main(@ARGV);
sub Main {
my $first = shift @ARGV;
$ARGV[0] = [qw(1 2 3)];
confess "Rubbish";
exit;
}
I get different results on different versions of perl (tested on 5.8.4, 5.8.8, and 5.14.1). And different results when I comment out the assignment to $ARGV[0].
But passing @ARGV to Main() and then modifying @ARGV (and Getopt::* modules modify @ARGV by default -- so yes @_ should be copied and parsed instead) seems to be a bad thing (bad in that it triggers bugs in perl/Carp, not that you shouldn't be allowed to do it and perl should blow up).