or与||
or比||优先级低,除此之外,两者无区别。
下面代码输出什么?
my $a = 0;
$a = $a or 1;
print $a, "\n";
$a = $a || 1;
print $a, "\n";
输出:
0
1
为什么呢?因为||, =, or 这三者优先级从左至右逐渐降低。
所以,这样写可以。
chomp(my $filename = shift( @ARGV ) || <STDIN>);
但是这样写就不行
chomp(my $filename = shift( @ARGV ) or <STDIN>);
会出现如下错误
Can't modify logical or (||) in chomp