为什么在Perl中,undef列表不是只读或常量值?
考虑以下Perl程序为什么在Perl中,undef列表不是只读或常量值?,perl,Perl,考虑以下Perl程序 use strict; use warnings; my @foo = qw(a b c); undef = shift @foo; print scalar @foo; 这将随着一条错误消息而消失: 试图在…处修改只读值 使用常量将产生不同的错误: 1 = shift @foo; 无法在… 执行。。。由于编译错误而中止 如果我们这样做,也是一样的: (1) = shift @foo; 所有这些对我来说都有意义。但是,将undef放入列表将起作用 (undef)
use strict;
use warnings;
my @foo = qw(a b c);
undef = shift @foo;
print scalar @foo;
这将随着一条错误消息而消失:
试图在…处修改只读值
使用常量将产生不同的错误:
1 = shift @foo;
无法在…执行。。。由于编译错误而中止 如果我们这样做,也是一样的:
(1) = shift @foo;
所有这些对我来说都有意义。但是,将undef
放入列表将起作用
(undef) = shift @foo;
现在它打印2
当然,如果您有一组返回值,并且只需要特定的返回值,这是常见的做法,如下所示:
my (undef, undef ,$mode, undef ,$uid, $gid, undef ,$size) = stat($filename);
示例中的第9行代码显示了这一点,但没有解释
我的问题是,Perl如何在内部处理这个问题?在内部,Perl对标量赋值和列表赋值有不同的运算符,即使它们在源代码中都拼写为
=
。list assignment操作符有一个特殊的例子,用于你要询问的unde
。你能提供一个到源代码的链接吗?到底是什么?Perl的源代码并不十分简单。如果有帮助,您可以查看并搜索op\u sassign
和op\u aassign
。或者,可能更有用的是,通过如下操作查看编译的字节码:perl-MO=Terse-E'(unde)=1;'对不起,我应该换个说法。我的意思是,你能提供一些证据来支持这个解释吗?由于您没有链接到说明我假设您在其他地方查找过的文档,很可能是源代码。:)