我知道這應該很容易在谷歌搜索,更不用說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