foreach my %hash (%myhash1,%myhash2,%myhash3)
{
while (($keys,$$value) = each %hash)
{
#use key and value...
}
}
为什么这不起作用:
它说foreach行的语法错误。 请告诉我为什么这是错误的。
答案 0 :(得分:4)
这是错误的,因为您似乎认为这允许您将每个哈希作为单独的构造进行访问,而您实际上正在做的是除了语法错误之外,还将哈希作为混合新列表进行访问。例如:
my %hash1 = qw(foo 1 bar 1);
my %hash2 = qw(abc 1 def 1);
for (%hash1, %hash2) # this list is now qw(foo 1 bar 1 abc 1 def 1)
在列表上下文语句中放置哈希(或数组)时,它们将扩展为其元素,并且不保留其完整性。一些内置函数确实允许这种行为,但普通的Perl代码不允许这样做。
您也不能将散列指定为for
迭代器变量,它只能是标量值。你能做的是:
for my $hash (\%myhash1, \%myhash2, \%myhash3) {
while (my ($key, $value) = each %$hash) {
...
也就是说,您创建一个哈希引用列表并迭代它们。请注意,您无法通过此方法区分哈希值。
另请注意,我使用my $hash
因为此变量必须是标量。
答案 1 :(得分:1)
语法应该是:
my $hash1 = {'a'=>1};
my $hash2 = {'b'=>1};
my @arr2 = ($hash1, $hash2);
foreach $hash (@arr2)
{
while(($key, $value) = each %$hash)
{
print $key, $value;
}
}
您需要引用然后取消引用哈希。