' || ='有什么用? perl脚本中的赋值运算符?

时间:2016-05-11 10:27:29

标签: perl operators perl-module assignment-operator

我正在使用这行代码:

$sheet -> {MaxRow} ||= $sheet -> {MinRow};

在我的脚本中。 我不明白帮助我。

1 个答案:

答案 0 :(得分:0)

||=表示'或等于',因此,如果MaxRow为0或任何其他错误值,则MaxRow将设置为MinRow的值。

||=是其中一个很好描述的赋值运算符 perldoc perlop

||=的一个常见用途是为可选子例程变量定义默认值。

my $data = { foo => 123, bar => 456, baz => 789 };
process($data);

sub process {
    my ($data, $is_special) = @_;
    $is_special ||= 0; # Typically not special
    do_something($data);
    do_special($data) if $is_special;
}

正如Sobrique建议的那样,“缓存”是一种“缓存”。是另一个常见的用例,可以节省自己计算一些昂贵的功能。

my $fib_cache = [];
sub fib {
    my ($n) = @_;
    return 1 if ($n == 0);
    return 1 if ($n == 1);
    $fib_cache->[$n] ||= fib($n-1) + fib($n-2); # Only compute if not seen before.
    sleep(1); # To make this slow enough...
    return $fib_cache->[$n];
}

print "Fib 10 is " . fib(10) . "\n";   # Takes 10 seconds...
print "Fib 10 is " . fib(10) . "\n";   # Instant