我試圖在Perl 5.8.8中傳遞哈希引用,我知道這應該是一件很平凡的事情。我通過散列遍佈在我的代碼的地方,但由於某種原因,它不會在這個子程序工作:在Perl中傳遞哈希引用
sub build_results_hash {
my %results;
my $search = $_[0];
my $json = $_[1];
my $json_passed = $_[2];
my $dbh = db_connect(-db=>'ghgs');
my $db_search = html_db_input($search,$dbh);
%results = db_hoh(-query=>"SELECT listing_id,MATCH(search) AGAINST($db_search) as relevance FROM search WHERE MATCH(search) AGAINST($db_search) LIMIT 1000",-key=>"listing_id",-dbh=>$dbh);
if(($json_passed == 1) and ($json ne '[]'))
{
narrow_results_hash(\%results,$search,$dbh,$json);
}
db_x($dbh);
return \%results;
}
sub db_hoh {
# ...
return %hoh;
}
db_hoh
剛剛返回哈希散列。問題是我打電話narrow_results_hash
並通過%results
;這是行不通的。但是,如果我刪除圍繞該方法調用的if
語句,那麼散列傳遞正常!我不確定什麼會導致這種行爲。這裏是我收到的哈希:
sub narrow_results_hash
{
use JSON::XS;
my $params = shift;
my %results = %$params;
# ...
print join(',',keys %results), "\n";
# ...
}
如果我刪除周圍narrow_results_hash
呼叫if
聲明build_results_hash
,它打印:「107,99,34」。但是,如果if
語句存在於該調用周圍,則會打印出「HASH(0x7fd61fbf0580)」。
什麼,確切地說,[你的意思](http://catb.org/~esr/faqs/smart-questions.html#beprecise)「不起作用」?另外,請將示例代碼縮減爲[最小測試用例](http://sscce.org/)。事實上,它不是獨立的。 – outis
Re:「我在我的代碼中遍佈散列」,不能將散列傳遞給subs(只是一個標量列表),subs不能返回散列(只是一個標量列表)。 – ikegami
使用[Data :: Dumper](http://search.cpan.org/~smueller/Data-Dumper-2.131/Dumper.pm)查看'%results'並確保它是散列哈希,因爲您相信。我嘗試查找db_hoh方法,但在DBI文檔中找不到它。我懷疑'db_hoh'可能會返回一個***引用***到哈希散列。 –