为什么 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'}
设置为字符串,而不是对(嵌套)散列的引用。
该错误表明您正在尝试将字符串当作哈希引用来使用。您的数据结构不包含您认为的内容。
当我尝试为多级散列赋值时
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'}
设置为字符串,而不是对(嵌套)散列的引用。
该错误表明您正在尝试将字符串当作哈希引用来使用。您的数据结构不包含您认为的内容。