in reply to getting args without clobbering @ARGV

While previous posts prop better suggestions, another way is to declare @ARGV with local in a block so it reclaims the old values when it exits the block. As shown bellow, add lines #7, #8, and 19 to the old code:
my $arg; my $argcount = 0; my $debug = 0; my $infile; #line 7 { #line 8 local @ARGV = @ARGV; while (@ARGV) { $arg = shift @ARGV; if ($arg =~ /-d/) { $debug = 1; } elsif ($argcount == 0) { $infile = $arg; } } #line 19 }