foreach my %hash (%myhash1,%myhash2,%myhash3)
{
while (($keys,$$value) = each %hash)
{
#use key and value...
}
}
为什么这不起作用:
它在 foreach 行上显示语法错误。请告诉我为什么错了。
foreach my %hash (%myhash1,%myhash2,%myhash3)
{
while (($keys,$$value) = each %hash)
{
#use key and value...
}
}
为什么这不起作用:
它在 foreach 行上显示语法错误。请告诉我为什么错了。
这是错误的,因为您似乎认为这允许您将每个散列作为一个单独的构造来访问,而实际上您正在做的是,除了语法错误之外,将散列作为一个混合在一起的新列表来访问。例如:
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
此变量是因为此变量必须是标量。
语法应该是这样的:
my $hash1 = {'a'=>1};
my $hash2 = {'b'=>1};
my @arr2 = ($hash1, $hash2);
foreach $hash (@arr2)
{
while(($key, $value) = each %$hash)
{
print $key, $value;
}
}
您需要引用然后取消引用哈希。