微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Perl中的“||”和“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

原文地址:https://www.jb51.cc/Perl/173287.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐