【问题标题】:what does perl operator "||=" do?perl 运算符“||=”是做什么的?
【发布时间】:2013-12-21 06:23:53
【问题描述】:

运算符||=在perl中做了什么?

如果你有这样的代码更具体:

my ($my_link);
$my_link  ||= DownloadF($file,'l') if $s->{_l};
$my_link  ||= DownloadF($file,'h') if $s->{_h};
$my_link  ||= DownloadF($file,'o') if $s->{_o};

||= 应该做什么?||= 和简单的= 有什么区别?

【问题讨论】:

标签: perl


【解决方案1】:

Perl 支持许多赋值运算符。 ||= 只是一个 logical or(完成短路)分配。

所以基本上你看到的是:

if ($s->{_l}) {
  $my_link = $my_link || DownloadF($file,'l');
}

因此,如果 $my_link 评估为某个真值,则 $my_link 将被分配给自身(本质上是无操作),否则分配 DownloadF 的结果。

perl 支持的其他赋值运算符:

 **= += *= &= <<= &&=
-= /= |= >>= ||=
.= %= ^= //=
x=

【讨论】:

  • 在这种情况下似乎使用了它,因此每个 possible 分配都使用相同的运算符模式。
【解决方案2】:

如果$my_link 为假(empty string, 0 or undef)DownloadF($file,'l') 存储到$my_link

此构造在用于分配默认值时总是存在问题(如果您希望 $my_link 为零怎么办)

【讨论】:

    【解决方案3】:

    这意味着如果 $my_link 为 nil/没有值,则使用 = (value) 为其分配此值

    如果 $my_link 已经有一个值,那么它什么也不做

    【讨论】:

      【解决方案4】:

      仅当变量评估为假值时才分配。 在您的每个示例行中,只有在条件 $s-&gt;{..} 为真时才会分配 $my_link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-16
        • 2013-08-08
        • 1970-01-01
        • 2014-11-18
        • 2016-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多