我有一个允许用户通过命令行参数或标准输入输入的脚本,所以我这样做了:
my @expr = @ARGV || <STDIN>;
这没有按预期工作。我只有一些数字,例如 1。我不得不使用以下版本:
my @expr = @ARGV;
if (!@expr) {
@expr = <STDIN>;
}
为什么会这样?如何使第一个版本工作(如果可能)?
最佳答案
||
运算符在标量上下文中需要其 LHS。同一表达式不能同时是列表和标量。
最巧妙的方法是使用 ? :
三元运算符:
my @expr = @ARGV ? @ARGV : <STDIN>;
这样,第一次出现的 @ARGV
是标量,因此测试非空,但第二次出现在列表上下文中,因此产生它的实际项目。
关于perl - 如何强制逻辑或运算符的列表上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189487/