【发布时间】:2016-09-06 16:37:12
【问题描述】:
我正在使用这行代码:
$sheet -> {MaxRow} ||= $sheet -> {MinRow};
在我的脚本中。 不明白帮帮我。
【问题讨论】:
标签: perl operators perl-module assignment-operator
我正在使用这行代码:
$sheet -> {MaxRow} ||= $sheet -> {MinRow};
在我的脚本中。 不明白帮帮我。
【问题讨论】:
标签: perl operators perl-module assignment-operator
||= 表示“或等于”,因此如果 MaxRow 为 0 或任何其他 false 值,则 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 所建议的,“or-cache”是另一种常见的用例,可以节省您计算一些昂贵的函数。
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
【讨论】:
defined 工作。我可能会建议一个“或缓存”类型的答案:$cache{$key} ||= calculate_some_value_for($key);