Perl 子程序中的私有变量
2021-06-27 本文已影响0人
PETJO
3. 子程序中的私有变量
- Perl 随时可以借助 my 操作符来创建私有变量,称之为词法变量(lexical variable)。
- 封闭语句块中的私有变量,与语句块之外任意地方的同名变量之间互不影响。
- perl 允许省略语句块中最后一个分号,但实际上需要代码简单到整个语句块内只有一行时才可以省略。
sub max { # 创建私有变量,几乎所有的 perl子程序类似程序代码开头
my ($m, $n); # 封闭语句块中的私有变量,与外部变量互不影响
($m, $n) = @_; # 将参数赋值给变量
if ($m > $n) {
$m; # perl 允许省略语句块中最后一个分号
} else {
$n; # 但实际上只有代码简单到整个语句块内只有一行时,才可以省略
}
}
my $result = &max(1, 2, 3, 4, 5);
print $result . "\n";
# 上述代码的简洁写法
sub max {
my ($m, $n) = @_;
if ($m > $n) { $m } else { $n }
}
$result1 = &max(6, 7, 8, 9, 10)
print $result1 . "\n";
- 变长参数列表,perl常常把很长的列表(长度不限)作为参数传给子程序。
- 通过检查@_数组的长度来判断参数个数是否符合预期。
# 变长参数列表
sub max {
if (@_ != 2) { # 通过检查 @_ 数组的长度来判断参数个数是否符合预期。
print "WARNING! &max should get exactly two arguments!\n"
}
my ($m, $n) = @_;
if ($m > $n) { $m } else { $n }
}
$result3 = &max(11, 12, 13, 14, 15)
print $result . "\n";
# 改写&max,使之能够接受任意数目的参数
my $maximum = &max(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
print $maximum . "\n";
sub max {
my($max_so_far) = shift @_;
foreach (@_) {
if ($_ > $max_so_far) {
$max_so_far = $_;
}
}
$max_so_far;
}