2016-10-31 2 views
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」になっています!

+0

my ($hashRef, $evidenceCode); 

置き換え '... = @_;' – mob

+0

うーん...私ああおかげでそれを指摘するために!それは長い一日だったhaha –

+1

脇に - [サブプロトタイプの使用を避ける](http://stackoverflow.com/questions/297034/why-are-perl-5s-function-prototypes-bad)彼らは混乱している、オブジェクト指向のコードと互換性がありません。関数にハッシュを渡す必要がある場合は、ハッシュリファレンスとして格納するか、関数を呼び出すときに参照( '\%h')を取る必要があります。 – duskwuff

答えて

0

$hashRef$evidenceCodeには何も割り当てませんでした。あなたが言うのを忘れて

my ($hashRef, $evidenceCode) = @_; 
関連する問題