gpt4 book ai didi

perl - 为什么 Perl 的自动激活在这种情况下起作用?

转载 作者:行者123 更新时间:2023-12-01 06:59:57 25 4
gpt4 key购买 nike

有人能帮我理解这个 Perl 程序的输出吗:

use Data::Dumper;
my %hash;
$hash{hello} = "foo";
$hash{hello}{world} = "bar";
print $hash{hello} . "\n";
print $hash{hello}{world} . "\n";
print Dumper(\%hash);

和输出:
foo
bar
$VAR1 = {
'hello' => 'foo'
};

“福”从何而来?为什么dumper没有打印出来?

请注意,如果我交换任务的顺序:
use Data::Dumper;
my %hash;
$hash{hello}{world} = "bar";
$hash{hello} = "foo";
print $hash{hello} . "\n";
print $hash{hello}{world} . "\n";
print Dumper(\%hash);

我的输出是我所期望的:
foo

$VAR1 = {
'hello' => 'foo'
};

编辑:
我知道 use strict;会捕获这个,但我更感兴趣的是知道 怎么样字符串“foo”仍在打印中。

最佳答案

您的代码丢失

use strict;
C:\Temp> huiCan't use string ("foo") as a HASH ref while "strict refs" in use at C:\Temp\hui.pl line 7.

Make sure all your scripts start with:

use strict;
use warnings;

鉴于:
$hash{hello} = "foo";
$hash{hello}不是 一个哈希引用。
$hash{hello}{world} = "bar";

处理字符串 "foo"作为散列引用并创建散列 %main::foo和套 $foo{world}"bar" .

当你这样做时:
print Dumper \%hash;

它只打印 %hash 的内容.然而,当你这样做时
print $hash{hello}{world} . "\n";

它打印 $foo{world} .

strict ,您不会发现脚本已经在整个包 namespace 中进行了践踏。

添加一个
print Dumper \%main::;

或者
print Dumper \%main::foo;

运行后检查符号表。

关于perl - 为什么 Perl 的自动激活在这种情况下起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1759488/

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