gpt4 book ai didi

perl - 添加哈希键

转载 作者:行者123 更新时间:2023-12-02 08:39:21 25 4
gpt4 key购买 nike

我正在使用从 0 开始的递增数字键将数据添加到散列。键/值没问题。当我添加第二个时,第一个键/值对指向第二个。此后的每次添加都会替换第二个键的值,然后指向它。 Dumper输出将是这样的。

$VAR1 = { '0' => { ... } }; 

添加第一个键/值之后。添加第二个后,我得到

$VAR1= { '1' => { ... }, '0' => $VAR1->{'1} }; 

添加第三个键/值后,它看起来像这样。

$VAR1 = { '1' => { ... }, '0' => $VAR1->{'1'}, '2' => $VAR1->{'1'} };  

我的问题是它为什么要这样做?我希望每个键/值都显示在哈希中。当我遍历哈希时,我得到每个键/值的相同数据。如何摆脱指向第二个添加键的引用指针?

最佳答案

您正在将每个元素的值设置为对同一散列的引用。 Data::Dumper 只是反射(reflect)了这一点。

如果您使用 Data::Dumper 作为序列化工具(讨厌!),那么您应该将 $Data::Dumper::Purity 设置为 1 以获取 eval 可以处理的内容。

use Data::Dumper qw( Dumper );

my %h2 = (a=>5,b=>6,c=>7);

my %h;
$h{0} = \%h2;
$h{1} = \%h2;
$h{2} = \%h2;

print("$h{0}{c} $h{2}{c}\n");
$h{0}{c} = 9;
print("$h{0}{c} $h{2}{c}\n");

{
local $Data::Dumper::Purity = 1;
print(Dumper(\%h));
}

输出:

7 7
9 9
$VAR1 = {
'0' => {
'c' => 9,
'a' => 5,
'b' => 6
},
'1' => {},
'2' => {}
};
$VAR1->{'0'} = $VAR1->{'1'};
$VAR1->{'2'} = $VAR1->{'1'};

另一方面,如果您不想使用对不同哈希值的存储引用,则可以使用

# Shallow copies
$h{0} = { %h2 }; # { ... } means do { my %anon = ( ... ); \%anon }
$h{1} = { %h2 };
$h{2} = { %h2 };

# Deep copies
use Storable qw( dclone );
$h{0} = dclone(\%h2);
$h{1} = dclone(\%h2);
$h{2} = dclone(\%h2);

输出:

7 7
9 7
$VAR1 = {
'0' => {
'a' => 5,
'b' => 6,
'c' => 9
},
'1' => {
'a' => 5,
'b' => 6,
'c' => 7
},
'2' => {
'a' => 5,
'b' => 6,
'c' => 7
}
};

关于perl - 添加哈希键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17995106/

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