in reply to bizarre Carp

Can you pass a reference to ARGV and get it to work on that?

use Carp; my_main(\@ARGV); sub my_main { my $first = shift @{$_[0]}; carp "Rubbish\n"; exit; }

That gets rid of the error, but I don't know how much of an impact that will have on the rest of your code.

Otherwise, why don't you just say:

my_main() unless caller();

@ARGV is, after all, a global, you don't have to pass it as a parameter. If you want to munge it non-destructively, localise it with local @ARGV = @ARGV.

• another intruder with the mooring in the heart of the Perl