"||"有什么区别 和"或"在Perl?

Ste*_*epp 36 perl operators

C风格的运算符&&,||...和它们的Perl人类可读版本" and"," or",... 之间有什么区别?

互联网代码似乎使用它们:

open (FILE, $file) or die("cannot open $file");
open (FILE, $file) || die("cannot open $file");
Run Code Online (Sandbox Code Playgroud)

joe*_*joe 42

来自Perl Doc ..

  • 要么

这是列表运算符.在列表运算符的右侧,它具有非常低的优先级,因此它控制在那里找到的所有逗号分隔的表达式.优先级较低的唯一运算符是逻辑运算符"and","or"和"not",它们可用于评估对列表运算符的调用,而无需额外的括号.逻辑或定义或独家或

二进制"或"返回两个周围表达式的逻辑分离.它相当于|| 除了非常低的优先权.这使其对控制流有用

__PRE__

这意味着它短路:即,仅当左表达式为假时才评估正确的表达式.由于它的优先级,您应该避免将其用于赋值,仅用于控制流.

__PRE__

但是,当它是列表上下文分配并且您尝试使用"||"时 对于控制流,您可能需要"或"以使赋值具有更高的优先级.

__PRE__

然后,你可以随时使用括号.

  • ||

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

__PRE__


dav*_*420 36

唯一的区别是他们的优先权.

open  FILE,  $file  or die("cannot open $file");   # This works
open (FILE,  $file) or die("cannot open $file");   # ...because it means this
open  FILE,  $file  || die("cannot open $file");   # This doesn't work
open  FILE, ($file  || die("cannot open $file"));  # ...because it means this
Run Code Online (Sandbox Code Playgroud)


yst*_*sth 35

!,&&,||,和^具有高的优先级,使得它们在构建表达有用; not,andor,并且xor具有低优先级,使得它们对于本质上不同的表达式之间的流控制是有用的.

  • 我更喜欢这个答案,而不是接受的答案,更短,并为您提供所需的答案. (6认同)

Ins*_*lah 11

"&&"和"||" 运营商的优先级高于"和","或"对应的运营商.