|
Perl 子程序可带有参数,这些参数会存放在一个特殊的数组变量 @_ 里,该变量在子程序执行期间有效。子程序可以访问它,并藉此判断参数的个数以及参数的值。
子程序的第 1 个参数存储在 $_[0] 中,第 2 个参数存储在 $_[1] 中,以此类推。注意,这里的这些数组元素和 $_ 内置变量毫无关系!
默认情况下,Perl 中定义的变量都是全局变量,在程序里的任何地方都可以访问它们。但在子程序里可以使用私有变量,私有变量和 C 语言中的局部变量一样的道理。创建子程序的私有变量使用操作符 my 。私有变量可以和全局变量同名且不会有任何冲突。
测试代码:
[Perl] 纯文本查看 复制代码 #!/usr/bin/perl
$i = 10;
$j = 20;
$k = 30;
$m = 40;
$n = 50;
sub subf {
my ($i, $j, $k, $m, $n);
($i, $j, $k, $m, $n) = @_;
print "$i, $j, $k, $m, $n \n";
print "$_[0], $_[1], $_[2], $_[3], $_[4] \n";
foreach (@_) {
print "$_ ";
}
print "\n";
}
print "global variable: $i, $j, $k, $m, $n \n";
subf(22, 83, 23, 44, 55);
print "check whether global variable changed: $i, $j, $k, $m, $n \n";
运行输出:./my.pl
global variable: 10, 20, 30, 40, 50
22, 83, 23, 44, 55
22, 83, 23, 44, 55
22 83 23 44 55
check whether global variable changed: 10, 20, 30, 40, 50
my 是词法变量 (lexical variable) ,实际上它不仅限于用在子程序中,在 if, while 或 foreach 等语句块中也可以使用。比如:
[code=perl]
#!/usr/bin/perl
$seq = 100;
print "$seq \n";
print "-------------\n";
foreach (1..10) {
my($seq) = $_ * $_;
print "$seq \n";
}
print "-------------\n";
print "$seq \n";[/mw_shl_code]
运行输出:./my2.pl
100
-------------
1
4
9
16
25
36
49
64
81
100
-------------
100
需要注意的是,在 my 不使用括号时,它只用来声明单个词法变量。如:my $friend, $good; #这里没有声明 $good 这个变量
my($friend, $good); #这里两个变量都声明了 |
|