加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl中的“||”和“or”有什么区别?

发布时间:2020-12-15 21:23:47 所属栏目:大数据 来源:网络整理
导读:C风格的运算符,||,…和它们的Perl人类可读版本“和”,“或”,…之间有什么区别? 看来,互联网代码使用它们: open (FILE,$file) or die("cannot open $file");open (FILE,$file) || die("cannot open $file"); 解决方法 来自Perl Doc .. OR 这是列表运
C风格的运算符&&&,||,…和它们的Perl人类可读版本“和”,“或”,…之间有什么区别?

看来,互联网代码使用它们:

open (FILE,$file) or die("cannot open $file");
open (FILE,$file) || die("cannot open $file");

解决方法

来自Perl Doc ..

> OR

这是列表运算符。在列表运算符的右侧,它具有非常低的优先级,以便它控制在那里找到的所有逗号分隔的表达式。唯一具有较低优先级的运算符是逻辑运算符“and”,“or”和“not”,其可以用于评估对列表运算符的调用而不需要额外的括号。
逻辑或,定义或,和独占或

二进制“或”返回两个周围表达式的逻辑析取。它等同于||除非非常低的优先级。这使得它对于控制流是有用的

print FH $data      or die "Can't write to FH: $!";

这意味着它短路:即,只有左表达式为假时才评估右表达式。由于其优先级,您应该避免将其用于分配,仅用于控制流。

$a = $b or $c;      # bug: this is wrong
($a = $b) or $c;        # really means this
$a = $b || $c;      # better written this way

但是,当它是一个列表上下文赋值,并且试图使用“||”对于控制流,您可能需要“或”,以便分配具有更高的优先级。

@info = stat($file) || die;     # oops,scalar sense of stat!
@info = stat($file) or die;     # better,now @info gets its due

然后再次,你可以总是使用括号。

> ||

如果任何列表运算符(print()等)或任何一元运算符(chdir()等)后跟一个左括号作为下一个标记,则运算符和括号内的参数被视为具有最高优先级像一个正常的函数调用。例如,因为命名一元运算符的优先级高于||:

chdir $foo    || die;   # (chdir $foo) || die
chdir($foo)   || die;   # (chdir $foo) || die
chdir ($foo)  || die;   # (chdir $foo) || die
chdir +($foo) || die;   # (chdir $foo) || die

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读