如何将散列传递给Perl子例程?
问题描述:
在我的一个主要(或主要)例程中,我有两个或更多的哈希值。我希望子程序foo()能够将这些可能的多哈希值作为不同的哈希值。现在我没有偏好,如果他们按价值或作为参考。我在过去的几个小时里一直在为此付出努力,并希望得到帮助,这样我就不必为PHP留下perl了! (我用的mod_perl,或将是)如何将散列传递给Perl子例程?
现在我已经得到了一些答案,我的要求,在这里
所示。从http://forums.gentoo.org/viewtopic-t-803720-start-0.html
# sub: dump the hash values with the keys '1' and '3'
sub dumpvals
{
foreach $h (@_)
{
print "1: $h->{1} 3: $h->{3}\n";
}
}
# initialize an array of anonymous hash references
@arr = ({1,2,3,4}, {1,7,3,8});
# create a new hash and add the reference to the array
$t{1} = 5;
$t{3} = 6;
push @arr, \%t;
# call the sub
dumpvals(@arr);
我只想把它扩大,使得dumpvals我可以做这样的事情:
foreach my %k (keys @_[0]) {
# use $k and @_[0], and others
}
的语法是错误的,但我想你可以告诉我试图让第一哈希键(HASH1或H1),和我对他们进行战斗。
如何在上面的代码片段中做到这一点?
答
我相信这是你在找什么:
sub dumpvals {
foreach my $key (keys %{$_[0]}) {
print "$key: $_[0]{$key}\n";
}
}
参数数组的元素是标量,所以你访问它
$_[0]
不@_[0]
。键操作上哈希,不哈希裁判,所以你需要解引用,使用
%
,当然还有,按键是标量,而不是哈希,让你用
my $key
,不my %key
。
答
要有dumpvals
转储传递给它的所有哈希的内容,使用
sub dumpvals {
foreach my $h (@_) {
foreach my $k (keys %$h) {
print "$k: $h->{$k}\n";
}
}
}
其时称为你的问题的输出是
1: 2 3: 4 1: 7 3: 8 1: 5 3: 6
你应该*总*有'严格使用;使用警告;'在每个脚本和模块的顶部。 – Ether 2010-03-27 16:17:22