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实际上,根据您的代码,未定义$hash1,因此不能强制转换为哈希。each %{$hash1 || {}}如果您必须以这种方式编码,一种选择是使用。

于 2013-08-05T14:54:48.943 回答