【发布时间】:2017-03-13 03:10:16
【问题描述】:
所以我似乎无法将哈希引用传递给 Perl 中的子例程。我正在尝试使用原型传递引用,我认为这可能是问题所在。简而言之,当在子例程中取消引用哈希引用并尝试打印出一个键数组时,该数组是空的,而当我在子例程之外打印时,我可以确认它确实包含键。
子程序的前向定义:
sub getEvidenceCodeFilteredHash (\%$);
有问题的子程序。 say 函数用于查看子程序中发生了什么,到目前为止,只有 'ONE' 被打印出来:
sub getEvidenceCodeFilteredHash (\%$) {
my ($hashRef, $evidenceCode);
my %evidenceCodeFilteredHash;
say "ONE";
say (keys %{$hashRef});
foreach (keys %{$hashRef}) {
say "TWO";
if ($_ ne '!gaf-version: 2.0') {
say "THREE";
${$hashRef}{$_} =~ /^\S+?\s+?\S+?\s+?\S+?\s+?\S+?\s+?\S+?\s+?(\S+?)\s.$/;
if ($evidenceCode eq $1) {
say "FOUR";
$evidenceCodeFilteredHash{$_} = ${$hashRef}{$_};
say $evidenceCodeFilteredHash{$_};
}
}
}
return %evidenceCodeFilteredHash;
}
在散列和标量上调用子例程:
my %evidenceCodeFilteredHash = getEvidenceCodeFilteredHash(%commonPairHash, $evidenceCode);
谢谢!
【问题讨论】:
-
你忘了说
... = @_; -
哦,天哪...谢谢您指出这一点!这是漫长的一天哈哈
-
顺便说一句 -- avoid using sub prototypes. 它们令人困惑,并且与面向对象的代码不兼容。如果您需要通过引用将哈希传递给函数,请将其存储为 hashref,或在调用函数时获取引用 (
\%h)。
标签: perl