我在perl中分配了一个哈希,如下所示:
my %myvers;
my @patches = ();
my @mypatches = ();
foreach my $myv ( @{$product->versions} ){
@patches = set_patches($myv->id); #get the array of patches for the version
foreach(@patches) {
push @mypatches,@{$_};
}
$myvers{$myv->name} = @mypatches;
}
$vars->{'myvers'} = \%myvers;
当我使用以下代码访问html模板中的哈希时:
[% FOREACH key IN myvers.keys %]
alert('[% key %] is [% myvers.$key %]; ');
[% END %]
键包含键, $ key 包含上面指定的每个键的数组中的元素数。
我无法访问数组元素的值。我怎么能这样做?
答案 0 :(得分:5)
问题是你不存储元素,只存储大小。
$myvers{ $myv->name } = @mypatches;
分配哈希值会强制标量上下文,因此@mypatches
会返回数组的大小。您需要存储对数组的引用:
$myvers{ $myv->name } = [ @mypatches ];
在外部循环中声明数组并使用引用可能更常见。事实上,您可以逐个推送元素,因为您可以推送整个数组:push @mypatches, @patches
,但是,您根本不需要两个数组:
my %myvers;
for my $myv (@{ $product->versions }) {
my @patches = set_patches($myv->id);
$myvers{ $myv->name } = \@patches;
}
$vars->{myvers} = \%myvers;
或者,如果你真的想要简洁:
$myvers{ $_->name } = [ set_patches($_->id) ] for @{ $product->versions };