0

これが私のコードです。

my $hash1 = $hash0->{unknown}{unknown};
while ( my ( $var, $hash2 ) = each %$hash1 ) {
    ...
}

以下のハッシュから"Can't use string ("package") as a HASH ref while "strict refs" in use"アクセスしようとすると、エラーが発生します。my $hash1 = $hash0->{unknown}{unknown}

print Dumper $hash0;

$VAR1 = 
bless( {
    'branch' => bless( {
         'lib/sample/sp.pm' => bless( {
             'branch' => bless( {
                 'lib/sample/sp.pm'=>     bless( {
                     'sample::sp' => '1'
                 }, 'DBM::Deep::Hash' )
             }, 'DBM::Deep::Hash' ),
         'branch' => $VAR1->{'branch'}{'lib/sample/sp.pm'}{'branch'}
         }, 'DBM::Deep::Hash' )
                     }, 'DBM::Deep::Hash' ),
'main' => bless( {}, 'DBM::Deep::Hash' ),
'main' => $VAR1->{'main'}
}, 'DBM::Deep::Hash' );

私は多くのフォーラムを調べましたが、このエラーに関する私の理解は、 $hash->{unknown}{unknown}ハッシュの代わりに文字列がある場合にこれにヒットするということです ($hash1コードの次のステップで逆参照しています)。しかし、ハッシュに文字列値(エラーメッセージに示されている「パッケージ」)は表示されませんが、それでも文句を言います。

誰かが問題を理解するのを手伝ってくれませんか。

4

1 に答える 1

0

あなたの例は言及していませんuse strictstrict実際には、あなたのコードによれば、with$hash1は定義されていないため、ハッシュに強制することはできません。1 つのオプションは、each %{$hash1 || {}}この方法でコーディングする必要がある場合に使用することです。

于 2013-08-05T14:54:48.943 に答える