我知道这应该很容易在谷歌搜索,更不用说perl的一个微不足道的用途,但我已经尝试了很多我找到的解决方案,到目前为止没有人给出了预期的行为。本质上,我试图调用子例程,从该子例程返回对散列的引用,将对该散列的引用传递给另一个子例程,然后通过类似于以下代码打印该散列的内容:如何在perl中通过引用传递散列
#!/usr/bin/perl
my $foo = make_foo();
foreach $key (sort keys %$foo) {
print "2 $key $$foo{$key}\n";
}
print_foo(\%foo);
sub print_foo
{
my %loc = ???;
foreach $key (sort keys %loc}) {
print "3 $key $loc{$key}\n";
}
}
sub make_foo
{
my %ret;
$ret{"a"} = "apple";
foreach $key (sort keys %ret) {
print "1 $key $ret{$key}\n";
}
return \%ret;
}
有人可以告诉我这样做的最佳方式(通过子程序),而不创建一个额外的哈希副本?我试过的解决方案没有打印出以“3”开头的任何行。
另外,我强烈建议你开始在所有代码的顶部使用'use strict'。你需要改变你的'foreach'行来使用'my'声明你的变量,但是它会为你节省很多麻烦,来调试简单的拼写错误。 – zostay