如果没有给出命令行参数,下面似乎可以正常工作,但是当它们全部得到的时候是提供的参数数量,而不是参数本身.似乎@ARGV被||强制标量.我也试过使用or和//得到类似的结果.这里使用的运算符是什么?
say for @ARGV || qw/one two three/;
解决方法
||
operator根据其所做的性质强加了标量上下文
Binary @H_404_10@"or" returns the logical disjunction of the two surrounding expressions. It’s equivalent to @H_404_10@|| except for the very low precedence.
(强调我的).因此,当它的左侧操作数是一个数组时,它获得数组的长度.
但是,如果该值为0,则仅评估右侧
This means that it short-circuits: the right expression is evaluated only if the left expression is false.
什么是C-Style Logical Or in perlop年的拼写
Scalar or list context propagates down to the right operand if it is evaluated.
所以你得到那个案子的清单.
没有任何运算符可以执行您的陈述所需的内容.最近的可能是
say for (@ARGV ? @ARGV : qw(one two));
但是有更好,更系统的方式来处理@ARGV.