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

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...