我有一个像这样的数组的哈希,我想在子程序中使用它。我通过引用这个子例程来传递它,如&sub(\%hash)
和内部子我执行此print Dumper $_[0]
,这是我的输出:
$VAR1 = {
'key1' => [
'value1',
'value2'
],
'key2' => [
'foo',
'bar'
]
};
正确的方法是将所有数组值的内容放入子例程中的2个独立数组中,如下所示:
my @ones ; my @tows ;
print "@ones" ;
print "\n";
print "@tows";
在输出中得到这个
value1 foo
value2 bar
答案 0 :(得分:3)
请勿使用&
调用子例程。它会让你在某个时候感到困惑,而且近二十年来一直没有必要。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
my %hash = (
key1 => [
'value1',
'value2'
],
key2 => [
'foo',
'bar'
]
);
print_vals(\%hash);
sub print_vals {
my ($hashref) = @_;
# $hashref->{key1} is a reference to an array
# therefore @{$hashref->{key1}} is an array
my @arr1 = @{$hashref->{key1}};
my @arr2 = @{$hashref->{key2}};
# $#arr1 is the last index in @arr1
for (0 .. $#arr1) {
say "$arr1[$_] $arr2[$_]"
}
}