基于我目前对Perl中哈希的理解,我希望这段代码可以打印出“hello world”。它没有打印任何东西。
%a=();
%b=();
$b{str} = "hello";
$a{1}=%b;
$b=();
$b{str} = "world";
$a{2}=%b;
print "$a{1}{str} $a{2}{str}";
我假设散列就像一个数组,为什么我不能让散列包含另一个?
答案 0 :(得分:6)
你应该总是使用“use strict;”在你的程序中。
使用引用和匿名哈希。
use strict;use warnings;
my %a;
my %b;
$b{str} = "hello";
$a{1}={%b};
%b=();
$b{str} = "world";
$a{2}={%b};
print "$a{1}{str} $a{2}{str}";
use strict;use warnings;
my %a;
my %b;
$b{str} = "hello";
$a{1}={%b};
%b=();
$b{str} = "world";
$a{2}={%b};
print "$a{1}{str} $a{2}{str}";
创建对哈希
{%b}
副本的引用。你需要在这里复制,因为你以后要把它清空。
答案 1 :(得分:6)
哈希的哈希很难在第一时间变得正确。在这种情况下
$a{1} = { %b };
...
$a{2} = { %b };
会让你到达目的地。
有关Perl中二维数据结构的详细信息,请参阅perldoc perllol
。
答案 2 :(得分:4)
简答:散列键只能与标量相关联,而不能与散列相关联。要做你想做的事,你需要使用引用。
我建议你阅读perlreftut,而不是重新哈希(嘿)如何创建多级数据结构。 perlref更完整,但一开始有点压倒性。
答案 3 :(得分:2)
也是小费。如果您只是学习哈希perl有一个名为Data :: Dumper的模块,它可以为您打印出数据结构,当您想要检查数据结构的值时,这非常方便。
use Data::Dumper;
print Dumper(\%a);
当你打印它时显示
$VAR1 = {
'1' => {
'str' => 'hello'
},
'2' => {
'str' => 'world'
}
};
答案 4 :(得分:1)
Perl喜欢扁平化您的数据结构。这通常是一件好事......例如,(@options, "another option", "yet another")
最终成为一个列表。
如果你的意思是在另一个结构中有一个结构,那么内部结构需要作为参考。像这样:
%a{1} = { %b };
大括号表示一个哈希值,你用%b中的值填充,然后返回作为引用而不是直接哈希。
你也可以说
$a{1} = \%b;
但是,对%b进行更改也会改变$ a {1}。