如何将散列传递给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),和我对他们进行战斗。

如何在上面的代码片段中做到这一点?

+0

你应该*总*有'严格使用;使用警告;'在每个脚本和模块的顶部。 – Ether 2010-03-27 16:17:22

我相信这是你在找什么:

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