Perl 如何使用foreach解析许多散列?
为什么这不起作用: 它说foreach行上有synta错误。Perl 如何使用foreach解析许多散列?,perl,Perl,为什么这不起作用: 它说foreach行上有synta错误。 请告诉我为什么它是错误的。这是错误的,因为您似乎认为这允许您将每个哈希作为一个单独的构造来访问,而事实上,除了语法错误之外,您所做的是将哈希作为一个混合在一起的新列表来访问。例如: foreach my %hash (%myhash1,%myhash2,%myhash3) { while (($keys,$$value) = each %hash) { #use key and value... } }
请告诉我为什么它是错误的。这是错误的,因为您似乎认为这允许您将每个哈希作为一个单独的构造来访问,而事实上,除了语法错误之外,您所做的是将哈希作为一个混合在一起的新列表来访问。例如:
foreach my %hash (%myhash1,%myhash2,%myhash3)
{
while (($keys,$$value) = each %hash)
{
#use key and value...
}
}
当您在列表上下文语句中放置哈希(或数组)时,它们将被扩展到其元素中,并且不会保留其完整性。一些内置函数确实允许这种行为,但普通的Perl代码不允许
您也不能将哈希指定为迭代器变量的,该变量只能是标量值。你能做的是:
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)
也就是说,您创建了一个哈希引用列表并对其进行迭代。请注意,使用这种方法无法区分散列之间的差异
还要注意,我使用了my$hash
,因为这个变量必须是标量 语法应该如下所示:
for my $hash (\%myhash1, \%myhash2, \%myhash3) {
while (my ($key, $value) = each %$hash) {
...
您需要引用然后取消对哈希的引用。谢谢。谢谢。我现在已经理解了散列的整个概念。您认为需要使用散列引用是正确的。但是,不需要从匿名散列引用开始($hash={}
)。您只需要创建对hash$hash\u ref=\%hash
my $hash1 = {'a'=>1};
my $hash2 = {'b'=>1};
my @arr2 = ($hash1, $hash2);
foreach $hash (@arr2)
{
while(($key, $value) = each %$hash)
{
print $key, $value;
}
}