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

标签 perl

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

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/

相关文章:

perl - 如何在 Perl 中使用 CGI::Session 处理 Web session ?

Perl 包整数

regex - PowerShell多字符串替换效率

perl - 如何打乱哈希中的值?

perl - 无法识别语法错误

XML::LibXML - 查找(并注册)文档中使用的 namespace

perl - 将一个大模块分成多个文件

linux - 创建日志文件计数器

sql - perl dbi 回滚不起作用

c - 多种语言的文学编程