为什么 perl hash 不以某些字符串变量作为它的键?

Why perl hash does not take certain string variables as its key?

当我尝试为多级散列赋值时

        use strict;
        # multi step before following code

        $res{cccc}{1}{sense} = '+'; # no problem
        my $ttsid = 'NZAEMG01000001';
        $res{$ttsid}{1}{sense} = '+'; # no problem
        $ttsid = 'NZAEMG01000001.1';
        $res{$ttsid}{1}{sense} = '+'; # no problem
        print "before sid is $sid\n"; # print out NZ_AEMG01000001t1

至此,程序运行良好

        $res{$sid}{1}{sense} = '+'; # even this gets problem too

但是,当我将这一行添加到程序中时,出现错误

 Can't use string ("57/128") as a HASH ref while "strict refs" in use

使用以下内容进行更多测试

        $sid = 'placement'; # result
        $res{$sid}{1}{sense} = '+';

这个没问题。所以在我看来,这条线

        $sid = 'placement'; # result

将 $sid 值从 NZ_AEMG01000001t1 更改为位置,这使得行

        $res{$sid}{1}{sense} = '+';

有效。这种翻译成

        $res{'NZ_AEMG01000001t1'}{1}{sense} = '+'; # Not working
        $res{'placement'}{1}{sense} = '+'; # working

确实,当我像这样将 $ttsid 更改为 $sid 值时

        $ttsid = 'NZ_AEMG01000001t1'; # which is $sid value
        $res{$ttsid}{1}{sense} = '+'; # has problem

这也有问题。

为什么?

因为在某些时候你做了相当于

$res{'NZ_AEMG01000001t1'} = %some_other_hash;

$res{'NZ_AEMG01000001t1'} 设置为字符串,而不是对(嵌套)散列的引用。

该错误表明您正在尝试将字符串当作哈希引用来使用。您的数据结构不包含您认为的内容。