perl - 在 foreach 中将 undef 变量提升为 ARRAY ref

标签 perl

use strict;                  
use warnings FATAL => 'all'; 

my $x = undef;               
if (@$x) { print "ok\n" }    
else { print "no\n" } 

对于 if (@$x)

可预测地产生“不能使用未定义的值作为 ARRAY 引用”。但是插入一个foreach (@$x):

use strict;                  
use warnings FATAL => 'all'; 

my $x = undef;               
foreach (@$x) { print $_ }  # <------- 
if (@$x) { print "ok\n" }    
else { print "no\n" }        

print ref($x)."\n"; 

输出:

no
ARRAY

foreach 行似乎对$x 进行了赋值。这是怎么回事?

最佳答案

自动生成

@$x

相当于

@{ $x //= [] }

在左值上下文中。

使用

if ($x) {
   for (@$x) {
      ...
   }
}

关于perl - 在 foreach 中将 undef 变量提升为 ARRAY ref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776861/

相关文章:

perl - Log4Perl:如何更改运行代码中使用的记录器文件? ( fork 之后)

perl - 为什么用 uniq 排序不能一起工作

xml - 计算 XQuery 中多个值出现次数的最有效方法

perl - 是否应该忽略符号与其变量名称之间的空格?

MySQL 注释导致 Perl DBI 的绑定(bind)参数计数困惑

mysql - 在 perl 中执行过程查询

linux - 使用perl cgi在网页上显示命令输出

perl - 如何传递一系列数字(例如 : 100 to 200) as command line argument in Perl?

perl - 将 Perl 与 emacs 编辑器结合使用

perl - Perl公开文件中的文件模式何时成为单独的参数?