C风格的运算符&&,||...和它们的Perl人类可读版本" and"," or",... 之间有什么区别?
互联网代码似乎使用它们:
open (FILE, $file) or die("cannot open $file");
open (FILE, $file) || die("cannot open $file");
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
yst*_*sth 35
!,&&,||,和^具有高的优先级,使得它们在构建表达有用; not,and和or,并且xor具有低优先级,使得它们对于本质上不同的表达式之间的流控制是有用的.