如果没有给出命令行参数,下面似乎可以正常工作,但是当它们全部得到的时候是提供的参数数量,而不是参数本身。 @ARGV
强制标量显示为||
。我也尝试使用or
和//
得到类似的结果。在这里使用的正确运算符是什么?
say for @ARGV || qw/one two three/;
答案 0 :(得分:6)
||
operator根据其所做的性质强加了标量上下文
二进制
"or"
返回两个周围表达式的逻辑析取。除了优先级非常低之外,它等同于||
。
(强调我的)。因此,当它的左侧操作数是一个数组时,它得到数组的长度。
但是,如果只是评估了右侧的
中列出的内容这意味着它会短路:仅当左表达式为假时才会评估正确的表达式。
标量或列表上下文如果被计算,则向下传播到右操作数。
所以你得到那个案子的清单。
没有任何操作员可以执行您的声明所需的操作。最接近的可能是
say for (@ARGV ? @ARGV : qw(one two));
但是有更好,更系统的方式来处理@ARGV
。
答案 1 :(得分:0)
将它写成两行。
@ARGV = qw[...] unless @ARGV;
say for @ARGV;