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



如果没有给出命令行参数,以下似乎可以正常工作,但是当它们全部得到时,我得到的是提供的参数数量,而不是参数本身。@ARGV似乎是由||强制标量的。我还尝试使用or//取得相似的结果。这里使用的正确操作员是什么?

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

||操作员通过其所做的性质强加了标量上下文

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

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

但是,如果是 0,则右手只是评估

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

C风格逻辑或Perlop中的内容

标量或列表上下文如果对其进行评估,则会传播到正确的操作数。

因此,您在这种情况下获取列表。

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

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

但是有更好,更多的系统性方法可以处理@ARGV

只需将其写成两行。

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

最新更新