【问题标题】:What is the use of '||=' assignment operator in perl scripting? [duplicate]'||=' 赋值运算符在 perl 脚本中的用途是什么? [复制]
【发布时间】:2016-09-06 16:37:12
【问题描述】:

我正在使用这行代码:

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

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

【问题讨论】:

    标签: perl operators perl-module assignment-operator


    【解决方案1】:

    ||= 表示“或等于”,因此如果 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);
    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 2021-04-16
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多