我有一个允许用户通过命令行参数或stdin输入的脚本,所以我做了:
my @expr = @ARGV || <STDIN>;
这没有按预期工作。我只得到一些像1.我必须使用下面的版本:
my @expr = @ARGV;
if (!@expr) {
@expr = <STDIN>;
}
为什么会这样?如何使第一个版本工作(如果可能)?
答案 0 :(得分:5)
||
运算符在标量上下文中需要其LHS。同一个表达式不能同时列表和标量。
最好的方法是使用? :
三元运算符:
my @expr = @ARGV ? @ARGV : <STDIN>;
这样,@ARGV
的第一次出现是标量,因此测试非空,但第二次出现在列表上下文中,因此产生实际项目。