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

Perl 如何强制逻辑or运算符的列表上下文,perl,Perl,我有一个脚本,允许用户通过命令行参数或stdin输入,所以我做到了: my @expr = @ARGV || <STDIN>; my@expr=@ARGV|; 这并没有像预期的那样起作用。我只有一些像1这样的数字。我必须使用以下版本: my @expr = @ARGV; if (!@expr) { @expr = <STDIN>; } my@expr=@ARGV; 如果(!@expr){ @expr=; } 为什么会这样?如何使第一个版本工作(如果可能)?操作

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

my @expr = @ARGV || <STDIN>;
my@expr=@ARGV|;
这并没有像预期的那样起作用。我只有一些像1这样的数字。我必须使用以下版本:

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

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

操作符需要标量上下文中的LHS。同一表达式不能同时为列表和标量

最简单的方法是使用
?:三值运算符:

my @expr = @ARGV ? @ARGV : <STDIN>;
my@expr=@ARGV@ARGV:;
这样一来,
@ARGV
的第一次出现是标量的,因此测试是否为非空,但第二次出现在列表上下文中,因此产生其实际项