1 }; my @e = keys(%{$d--6ren">
gpt4 book ai didi

perl - 为什么 Autovivification 发生在 keys() 而不是 %{..} ?

转载 作者:行者123 更新时间:2023-12-04 08:33:23 24 4
gpt4 key购买 nike

这是我发现的一个微妙之处 keys() .

$ perl -e 'use warnings; use strict; my $d = { "ab" => 1 }; my @e = keys(%{$d->{cd}});'

$ perl -e 'use warnings; use strict; my $d = { "ab" => 1 }; my %e = %{$d->{cd}};'
Can't use an undefined value as a HASH reference at -e line 1.

我最困惑的是为什么第一个片段不会给出取消引用错误。当我使用 Data::Dumper ,很明显,在第一个片段中, $d->{cd} , 自动激活为 {} .

为什么 keys需要自动激活吗?我试着阅读 perldoc对于它,找不到满意的答案。 keys不设置别名( $_ 等),因此 perl 无需考虑 $d->{cd}需要在左值上下文中,是吗? (我了解表达式是否需要在左值上下文中自动激活,如 here 所述。

一个相关的 post .

最佳答案

请注意,键确实可以是左值(设置散列的预期元素数)。

但即使键本身不在左值上下文中使用,它也会产生重置散列迭代器的副作用。

所以它确实修改了散列,因此给解引用一个左值上下文,这使它自动激活。

关于perl - 为什么 Autovivification 发生在 keys() 而不是 %{..} ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35029084/

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