程序如下:
#!/usr/bin/perl -w
print "Enter three numbers: ";
chomp($nums = <STDIN>);
($num1, $num2, $num3) = split(" ", $nums);
print "In MAIN: ", $num1, " ", $num2, " ", $num3, "\n";
proc1($num1, $num2, $num3);
print "In MAIN: ", $num1, " ", $num2, " ", $num3, "\n";
sub proc1 {
my $num2 = 100;
local $num3 = 200;
($num1, $num2, $num3) = @_;
($num1, $num2, $num3) = ($num1+2, $num2+2, $num3+2);
print "In PROC1: ", $num1, " ", $num2, " ", $num3, "\n";
proc2();
print "In PROC1: ", $num1, " ", $num2, " ", $num3, "\n";
}
sub proc2 {
$num1++; # Global $num1
$num2++; # Global $num2
$num3++; # $num3 from proc1
print "In PROC2: ", $num1, " ", $num2, " ", $num3, "\n";
}
###############
运行结果:
[root@localhost perlstd]# perl sub_call.pl
Enter three numbers: 1 1 1
In MAIN: 1 1 1
In PROC1: 3 3 3
In PROC2: 4 2 4
In PROC1: 4 3 4
In MAIN: 4 2 1
为什么$num2的表现跟我感觉的常识不一样呢?到底本地作用域和全局以及动态作用域是怎么覆盖的? |