0
私は、Perlのサブルーチンへのハッシュリファレンスを渡すのに問題があるようです。プロトタイプを使ってリファレンスを渡そうとしていますが、問題がどこから来ているのかもしれないと思います。要するに、サブルーチンでハッシュリファレンスを逆参照し、キーの配列を出力しようとすると、配列は空ですが、サブルーチンの外側に印刷されたときにキーが含まれていることを確認できます。サブルーチンのプロトタイプを使ってPerlのサブルーチンにハッシュリファレンスを渡す際に問題がありますか?
フォワードの定義:問題の
sub getEvidenceCodeFilteredHash (\%$);
サブルーチン。
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);
おかげでプリントアウトされたと言う機能はサブルーチンで何が起こっているかを見て、今のように、唯一の「ONE」になっています!
で
置き換え '... = @_;' – mob
うーん...私ああおかげでそれを指摘するために!それは長い一日だったhaha –
脇に - [サブプロトタイプの使用を避ける](http://stackoverflow.com/questions/297034/why-are-perl-5s-function-prototypes-bad)彼らは混乱している、オブジェクト指向のコードと互換性がありません。関数にハッシュを渡す必要がある場合は、ハッシュリファレンスとして格納するか、関数を呼び出すときに参照( '\%h')を取る必要があります。 – duskwuff