Perl哈希问题
我被一个又一个的哈希弄糊涂了,找不到解决办法 我有一些杂凑Perl哈希问题,perl,Perl,我被一个又一个的哈希弄糊涂了,找不到解决办法 我有一些杂凑 %myHash = {'e5' => '0', 'f7' => 'b'}; %myHash2 = {'e5' => '1', 'f7' => 'a'}; %newHash; $newHash{'move0'} = {%myHash}; $newHash{'move1'} = {%myHash2}; print Dumper(\%newHash); 输出: $newHash = { 'mov
%myHash = {'e5' => '0', 'f7' => 'b'};
%myHash2 = {'e5' => '1', 'f7' => 'a'};
%newHash;
$newHash{'move0'} = {%myHash};
$newHash{'move1'} = {%myHash2};
print Dumper(\%newHash);
输出:
$newHash = {
'move0' => {
'e5' => '0',
'f7' => 'b'
},
'move1' => {
'e5' => '1',
'f7' => 'a'
}
};
然后,当我尝试从我的散列中提取一个散列并将其存储在散列中时,我无法让它工作
my %hash = {$newHash{"move0"}};
print Dumper(\%hash);
产出:
$hash = {
'HASH(0x26b7d40)' => undef
};
我尝试了许多其他方法从散列中获取散列并将其分配给散列,但它不起作用。要复制散列,可以使用
my %dst = %src;
您有一个对散列的引用,因此
my %dst = %{ $newHash{move0} };
但是这些浪费的拷贝是怎么回事???使用
my %move0 = ( e5 => '0', f7 => 'b' );
my %move1 = ( e5 => '1', f7 => 'a' );
my %data = (
move0 => \%move0,
move1 => \%move1,
);
或
然后
您应该使用
strict
和warnings
pragma。然后你会从编译器那里得到这里发生的事情的线索。大括号将生成哈希引用。您可能想使用括号(而不是卷曲),例如:my%myHash=('e5'=>'0','f7'=>'b')
?这将生成一个常规散列(不是对散列的引用)代码>和使用严格代码>。这里有一些基本语法错误,如果这些pragma生效,您就会知道这些错误。你也应该在没有警告的情况下收到警告,不是吗?这是对我代码的删节,我在我的主程序中使用了严格的警告等。他们认为你使用了使用警告代码>因为您的代码发出警告。但实际上这根本不是问题所在。真正的问题是你对你运行的代码撒了谎。请修复您的问题,使其中的代码实际生成其中的输出。这不会在使用strict时运行代码>。不能将标量{..}
分配给哈希%h
。
my %data = (
move0 => { e5 => '0', f7 => 'b' },
move1 => { e5 => '1', f7 => 'a' },
);
my $move = $data{move0};