如果没有给出命令行参数,如何使用默认数组?

时间:2017-09-10 04:55:24

标签: arrays perl default

如果没有给出命令行参数,下面似乎可以正常工作,但是当它们全部得到的时候是提供的参数数量,而不是参数本身。 @ARGV强制标量显示为||。我也尝试使用or//得到类似的结果。在这里使用的正确运算符是什么?

say for @ARGV || qw/one two three/;

2 个答案:

答案 0 :(得分:6)

|| operator根据其所做的性质强加了标量上下文

  

二进制"or"返回两个周围表达式的逻辑析取。除了优先级非常低之外,它等同于||

(强调我的)。因此,当它的左侧操作数是一个数组时,它得到数组的长度。

但是,如果只是评估了右侧的

  

这意味着它会短路:仅当左表达式为假时才会评估正确的表达式。

C-Style Logical Or in perlop

中列出的内容
  

标量或列表上下文如果被计算,则向下传播到右操作数。

所以你得到那个案子的清单。

没有任何操作员可以执行您的声明所需的操作。最接近的可能是

say for (@ARGV ? @ARGV : qw(one two));

但是有更好,更系统的方式来处理@ARGV

答案 1 :(得分:0)

将它写成两行。

@ARGV = qw[...] unless @ARGV;
say for @ARGV;