为什么perl hash不会将某些字符串变量作为其键?

Ton*_* Xu 0 perl hash key assign

当我尝试将值分配给多级哈希时

        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
Run Code Online (Sandbox Code Playgroud)

在这一步,程序运行良好

        $res{$sid}{1}{sense} = '+'; # even this gets problem too
Run Code Online (Sandbox Code Playgroud)

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

 Can't use string ("57/128") as a HASH ref while "strict refs" in use
Run Code Online (Sandbox Code Playgroud)

用以下方法测试一下

        $sid = 'placement'; # result
        $res{$sid}{1}{sense} = '+';
Run Code Online (Sandbox Code Playgroud)

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

        $sid = 'placement'; # result
Run Code Online (Sandbox Code Playgroud)

将$ sid值从NZ_AEMG01000001t1更改为展示位置,这就行了

        $res{$sid}{1}{sense} = '+';
Run Code Online (Sandbox Code Playgroud)

作品.这种转化为

        $res{'NZ_AEMG01000001t1'}{1}{sense} = '+'; # Not working
        $res{'placement'}{1}{sense} = '+'; # working
Run Code Online (Sandbox Code Playgroud)

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

        $ttsid = 'NZ_AEMG01000001t1'; # which is $sid value
        $res{$ttsid}{1}{sense} = '+'; # has problem
Run Code Online (Sandbox Code Playgroud)

这也有问题.

为什么?

mel*_*ene 7

因为在某些时候你做了相同的

$res{'NZ_AEMG01000001t1'} = %some_other_hash;
Run Code Online (Sandbox Code Playgroud)

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

该错误表明您正在尝试使用字符串,就好像它是hashref一样.您的数据结构不包含您的想法.