Arrays 如何访问同时具有哈希引用和数组引用的哈希元素
我有一个散列,它包含几个级别的散列,其中包含数组和散列引用。 因此,我编写了一个类似下面的代码,使用Arrays 如何访问同时具有哈希引用和数组引用的哈希元素,arrays,perl,hash,Arrays,Perl,Hash,我有一个散列,它包含几个级别的散列,其中包含数组和散列引用。 因此,我编写了一个类似下面的代码,使用ref($var)的输出访问这两者。 %c是我的哈希。在for循环的第三级之后,我得到了散列引用和数组引用,所以我想访问数组元素。 我正在使用my$array\u ref=[%$new\u value]在我的else循环中访问数组元素。 但我得到了以下错误: Type of arg 1 to keys must be hash (not array dereference) 我的代码: 台词 p
ref($var)
的输出访问这两者。
%c
是我的哈希。在for循环的第三级之后,我得到了散列引用和数组引用,所以我想访问数组元素。
我正在使用my$array\u ref=[%$new\u value]代码>在我的else循环中访问数组元素。
但我得到了以下错误:
Type of arg 1 to keys must be hash (not array dereference)
我的代码:
台词
print "\t", join "\t", map { %$_ } %$new_values;
及
包含两个解引用而不是一个,并且map{…},%hash
会将所有键和值传递给块,因此尝试解引用块内的键将始终失败,因为它不能作为引用
现在还不清楚这些应该是什么。如果$new\u values
是数组引用,您可能只需要一个值列表,所以您需要
print "\t", join "\t", @$new_values;
或者只是
print "\t$_" for @$new_values;
但是在散列的情况下,您想查看键还是只查看值?如果是后者,那么你应该写
print "\t", join "\t", values %$new_values;
但是有很多方法可以转储每个哈希元素的键和值。这里有一个建议
print "\t", join ', ', map "$_ => '$new_values->{$_}'", keys %$new_values;
我不明白你在上一节想说什么
my $array_ref = [%$new_values];
my $new_type = ref($array_ref);
print "$new_type\n";
foreach my $key_array ( keys @$array_ref) {
print "$key_array\n";
}
print "\t", $key_array, "\n\t";
但是很明显,您尝试在my$array\u ref=[%$new\u values]
中将$new\u values
作为散列来取消引用$new\u values
将失败,因为这是在您已确认$new\u values
是数组引用的块中进行的
另外,行my$new\u type=ref($array\u ref)
似乎是多余的,因为您刚刚创建了$array\u ref
作为数组引用,所以$new\u type
将始终是array
最后,您的for
循环键@$array\u ref
可能并不像您想象的那样。在Perl5版本12之前,这是一个语法错误,但此后它将返回数组索引列表,因此与0$#$数组\u ref
如果您能更好地解释一下这一部分,我将很乐意帮助您使其工作。请始终在每个Perl程序的顶部使用strict
和warnings,尤其是在您请求帮助时
print "\t", join ', ', map "$_ => '$new_values->{$_}'", keys %$new_values;
my $array_ref = [%$new_values];
my $new_type = ref($array_ref);
print "$new_type\n";
foreach my $key_array ( keys @$array_ref) {
print "$key_array\n";
}
print "\t", $key_array, "\n\t";