Perl 子程序中的私有变量

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;
}

你可能感兴趣的:(Perl 子程序中的私有变量)