1#!./perl 2 3print "1..5\n"; 4 5my $j = 1; 6for $i ( 1,2,5,4,3 ) { 7 $file = mkfiles($i); 8 open(FH, "> $file") || die "can't create $file: $!"; 9 print FH "not ok " . $j++ . "\n"; 10 close(FH) || die "Can't close $file: $!"; 11} 12 13 14{ 15 local *ARGV; 16 local $^I = '.bak'; 17 local $_; 18 @ARGV = mkfiles(1..3); 19 $n = 0; 20 while (<>) { 21 print STDOUT "# initial \@ARGV: [@ARGV]\n"; 22 if ($n++ == 2) { 23 other(); 24 } 25 show(); 26 } 27} 28 29$^I = undef; 30@ARGV = mkfiles(1..3); 31$n = 0; 32while (<>) { 33 print STDOUT "#final \@ARGV: [@ARGV]\n"; 34 if ($n++ == 2) { 35 other(); 36 } 37 show(); 38} 39 40sub show { 41 #warn "$ARGV: $_"; 42 s/^not //; 43 print; 44} 45 46sub other { 47 print STDOUT "# Calling other\n"; 48 local *ARGV; 49 local *ARGVOUT; 50 local $_; 51 @ARGV = mkfiles(5, 4); 52 while (<>) { 53 print STDOUT "# inner \@ARGV: [@ARGV]\n"; 54 show(); 55 } 56} 57 58sub mkfiles { 59 my @files = map { "scratch$_" } @_; 60 return wantarray ? @files : $files[-1]; 61} 62 63END { unlink map { ($_, "$_.bak") } mkfiles(1..5) } 64