【问题标题】:what does the double forward slash mean here?双正斜杠在这里是什么意思?
【发布时间】:2014-07-15 10:04:01
【问题描述】:

我是 Perl 的新手,在工作中遇到了这段代码,我搜索了一段时间,但没有找到答案。任何人都可以用简单的英语帮助解释它的功能吗?谢谢。

my $abc = delete $args{ 'abc' } // croak 'some information!';

【问题讨论】:

    标签: perl


    【解决方案1】:

    来自此页面:http://perldoc.perl.org/perlop.html#Logical-Defined-Or

    虽然它在 C 中没有直接的等价物,但 Perl 的 // 运算符与其 C 风格的 or 有关。实际上,它与|| 完全相同,只是它测试的是左侧的定义性,而不是其真相。因此,EXPR1 // EXPR2 如果已定义,则返回 EXPR1 的值,否则返回 EXPR2 的值。 (EXPR1scalar 上下文中评估,EXPR2// 本身的上下文中评估)。通常,这与defined(EXPR1) ? EXPR1 : EXPR2 的结果相同(除了三元运算符形式可以用作左值,而EXPR1 // EXPR2 不能,EXPR1 只会被计算一次)。这对于为变量提供默认值非常有用。如果您真的想测试是否至少定义了$a$b 之一,请使用defined($a // $b)

    【讨论】:

    • 这类似于SQL的COALESCE函数(虽然这里只支持两个操作数)
    【解决方案2】:

    在 perlop 中检查Logical Defined-Or,它类似于||,但它检查undef 值(不是假值)。

    虽然它在 C 中没有直接的等价物,但 Perl 的 // 运算符与其 C 风格的或有关。事实上,它与 || 完全一样,只是它测试的是左侧的定义性而不是其真实性。

    简而言之,

    my $abc = delete $args{ 'abc' } // croak 'some information!';
    

    $args{ 'abc' } 返回undef 值时会发出嘶嘶声。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 2021-06-15
      • 2016-04-06
      • 2021-09-04
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多