2013-12-21 103 views
-2

运营商||=在perl中做什么?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}; 

什么||=该做的,是什么||=和简单=之间的区别?

+2

尝试['的perldoc perlop'(http://perldoc.perl.org/perlop.html)下一次。 –

回答

4

Perl的支持很多赋值运算符的时候一直有问题。 ||=只是一个logical or(完成短路,)分配。

所以基本上你看的是:

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

所以如果$my_link计算为一些真正的价值则$my_link将被分配到自身(无操作本质上),否则DownloadF结果分配。通过perl的支持

其他赋值运算符:

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

它似乎在这种情况下使用,以便每个_possible_赋值使用相同的运算符模式。 –

1

这意味着,如果$ my_link是零/没有价值,然后分配给它=(值),这个值

如果$ my_link已经有值,那么就没有做任何事情

1

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

2

如果$my_link是假(empty string, 0 or undef)DownloadF($file,'l')$my_link

此构造用来指定一个默认值(如果你想$my_link为零)