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)
这也有问题.
为什么?
因为在某些时候你做了相同的
$res{'NZ_AEMG01000001t1'} = %some_other_hash;
Run Code Online (Sandbox Code Playgroud)
设置$res{'NZ_AEMG01000001t1'}为字符串,而不是对(嵌套)哈希的引用.
该错误表明您正在尝试使用字符串,就好像它是hashref一样.您的数据结构不包含您的想法.
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |