gpt4 book ai didi

perl - 缺少未定义的值作为哈希引用的错误

转载 作者:行者123 更新时间:2023-12-04 16:13:58 25 4
gpt4 key购买 nike

我有这两个代码片段,看起来应该产生相同的结果,但后者会导致错误。

1:

my $href = undef;
my @values = values %{ $href };
# OK - @values is empty

2:
my $href = undef;
my %hash = %{ $href }; # <-- Error here
my @values = values %hash;
# ERROR: Can't use an undefined value as a HASH reference

为什么在同一行中添加 values可以使其正常工作?我希望它们都抛出错误,因为使用未定义的值作为哈希引用显然是一个错误。我没有要测试的最新版本的perl,但是在5.8.8和5.10.1中可以重现。

最佳答案

自动对齐是在遵循undef时自动创建变量

my $ref;
say $ref // "[undef]"; # / # Outputs: [undef]
$ref->{abc} = 123; # This autovivifies a hash and a reference to it.
say $ref // "[undef]"; # Outputs: HASH(0x...)
say for keys %$ref; # Outputs: abc
仅当在左值上下文中取消引用时,才会发生自动生存。
my $ref;
%$ref = ( abc => 123 ); # Autovivifies
my $ref;
my %h = %$ref; # Error
在左值上下文中评估sub的参数。我不知道是否在左值上下文中评估命名运算符(如 values)的操作数是否存在任何一致性,但是 values的操作数显然是这种情况。
my $ref;
say $ref // "[undef]"; # / # Outputs: [undef]
values %$ref;
say $ref // "[undef]"; # Outputs: HASH(0x...)
当不进行自动验证时,您将尝试遵循undef,这是没有意义的,因此会导致错误。

关于perl - 缺少未定义的值作为哈希引用的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26874485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com