我这样做了吗?
my $variable = "hello,world";
my @somearray = split(',',$variable);
my %hash = ( 'somevalue' => @somearray);
foreach my $key ( keys %hash ) {
print $key;
foreach my $value ( @{$hash{$key}} ) {
print $value; #the value is not being read/printed
}
}
我不知道我是否正在访问存储在特定值
的哈希中的数组答案 0 :(得分:1)
你已经被perl的扁平化列表所困扰。你知道,当你这样做时:
my %hash = ('somekey' => @somearray)
,perl将其转换为哈希分配的列表形式。那么,perl实际看到的是:
my %hash = ('somekey' => 'hello', 'world' => ''); # I have put '' for simplicity, though it might well be `undef`
所以,下次当您查看某些键时,您最终会收到字符串' hello'而不是阵列" ['你好','世界']"
要解决此问题,您可以使用引用。 perlref可以为您提供更多信息。
my %hash = ('somekey' => \@somearray);
# $hash{'somekey'} is an array reference now.
# So you use the pointy lookup syntax.
print $hash{'somekey'}->[0];
可视化数据结构的另一个有用工具是使用模块Data::Dumper
。它可以在perl核心发行版中使用。使用它就像做:
use Data::Dumper;
print Dumper \%hash; # remember to pass in a reference to the actual datastructure, not the data structure itself.
玩得开心!
答案 1 :(得分:1)
这是错误的:
my %hash = ( 'somevalue' => @somearray);
数组是#34;扁平"到列表,所以该行相当于
my %hash = qw( somevalue hello world );
您需要一个数组引用来创建内部数组:
my %hash = ( 'somevalue' => \@somearray);
答案 2 :(得分:0)
所以你想创建一个数组数据结构的哈希。像这样的东西也会起作用。
my $variable = "hello,world";
my @somearray = split(',',$variable);
my %hash;
#my %hash = ( 'somevalue' => @somearray);
push (@{$hash{'somevalue'}},@somearray); #Storing it in a hash of array
foreach my $key ( keys %hash ) {
print $key;
foreach my $value ( @{$hash{$key}} ) {
print $value; #the value is not being read/printed
}
}