如何强制逻辑或运算符的列表上下文

时间:2015-03-22 00:05:52

标签: perl

我有一个允许用户通过命令行参数或stdin输入的脚本,所以我做了:

my @expr = @ARGV || <STDIN>;

这没有按预期工作。我只得到一些像1.我必须使用下面的版本:

my @expr = @ARGV;
if (!@expr) {
  @expr = <STDIN>;
}

为什么会这样?如何使第一个版本工作(如果可能)?

1 个答案:

答案 0 :(得分:5)

||运算符在标量上下文中需要其LHS。同一个表达式不能同时列表和标量。

最好的方法是使用? :三元运算符:

my @expr = @ARGV ? @ARGV : <STDIN>;

这样,@ARGV的第一次出现是标量,因此测试非空,但第二次出现在列表上下文中,因此产生实际项目。