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

托尼许

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

        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'}为字符串,而不是对(嵌套)哈希的引用。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 perl 中,为什么当哈希包含长字符串时 sprintf(Dumper \%hash) 会抛出警告?

来自分类Dev

为什么Perl字符串变为未定义?

来自分类Dev

将查询字符串转换为 Hash Perl

来自分类Dev

Perl-不是HASH引用,或者在使用“ strict refs”时不能使用字符串(“ ...”)作为HASH引用

来自分类Dev

为什么 perl 不允许子程序使用 %hash、@array 参数?

来自分类Dev

在Perl Hash中推送键/值对的列表

来自分类Dev

为什么我的Perl正则表达式无法在换行符之后删除某些字符串?

来自分类Dev

为什么Perl 6的字符串连接不像.WHAT?

来自分类Dev

为什么分支名称开头不能包含'hash'(#)字符?

来自分类Dev

为什么在PHP中使用str_replace不能将hash(#)从字符串中删除?

来自分类Dev

为什么在Perl中将#字符视为“单词”字符?

来自分类Dev

perl:为什么$ hashsize = keys $ hash {$ foo}给出实验性警告,我该如何写得更好?

来自分类Dev

为什么我的多行perl字符串代替添加空白行?

来自分类Dev

Perl:不是HASH参考

来自分类Dev

perl hash 打印一个键的值

来自分类Dev

如果 Perl 中的键相同,则将值附加到 Hash

来自分类Dev

Perl-使用RegExp字符串作为哈希键

来自分类Dev

在Perl中,为什么拆分为字符时utf-8字符串的打印方式不同?

来自分类Java

查询字符串中Hash(#)的行为是什么

来自分类Dev

为什么这个(主要是)空的Perl子例程返回一个空字符串?

来自分类Dev

Perl哈希:$ hash {key}与$ hash-> {key}

来自分类Dev

当键或值很大时,为什么redis hash从ziplist转换为hashtable?

来自分类Dev

为什么perl DBI为什么在准备好的语句(Oracle)中添加特殊字符<*>(小于星号大于)?

来自分类Dev

为什么 Chrome 不解码 location.hash 并打印解码后的字符?

来自分类Dev

Perl中的字符串相等的定义是什么?

来自分类Dev

在perl中增加字符串最快的方法是什么?

来自分类Dev

Ruby:为什么Hash === {}返回true?

来自分类Dev

为什么Ruby #hash方法是随机的?

来自分类Java

为什么我可以在HashMap中使用字符串作为键?

Related 相关文章

  1. 1

    在 perl 中,为什么当哈希包含长字符串时 sprintf(Dumper \%hash) 会抛出警告?

  2. 2

    为什么Perl字符串变为未定义?

  3. 3

    将查询字符串转换为 Hash Perl

  4. 4

    Perl-不是HASH引用,或者在使用“ strict refs”时不能使用字符串(“ ...”)作为HASH引用

  5. 5

    为什么 perl 不允许子程序使用 %hash、@array 参数?

  6. 6

    在Perl Hash中推送键/值对的列表

  7. 7

    为什么我的Perl正则表达式无法在换行符之后删除某些字符串?

  8. 8

    为什么Perl 6的字符串连接不像.WHAT?

  9. 9

    为什么分支名称开头不能包含'hash'(#)字符?

  10. 10

    为什么在PHP中使用str_replace不能将hash(#)从字符串中删除?

  11. 11

    为什么在Perl中将#字符视为“单词”字符?

  12. 12

    perl:为什么$ hashsize = keys $ hash {$ foo}给出实验性警告,我该如何写得更好?

  13. 13

    为什么我的多行perl字符串代替添加空白行?

  14. 14

    Perl:不是HASH参考

  15. 15

    perl hash 打印一个键的值

  16. 16

    如果 Perl 中的键相同,则将值附加到 Hash

  17. 17

    Perl-使用RegExp字符串作为哈希键

  18. 18

    在Perl中,为什么拆分为字符时utf-8字符串的打印方式不同?

  19. 19

    查询字符串中Hash(#)的行为是什么

  20. 20

    为什么这个(主要是)空的Perl子例程返回一个空字符串?

  21. 21

    Perl哈希:$ hash {key}与$ hash-> {key}

  22. 22

    当键或值很大时,为什么redis hash从ziplist转换为hashtable?

  23. 23

    为什么perl DBI为什么在准备好的语句(Oracle)中添加特殊字符<*>(小于星号大于)?

  24. 24

    为什么 Chrome 不解码 location.hash 并打印解码后的字符?

  25. 25

    Perl中的字符串相等的定义是什么?

  26. 26

    在perl中增加字符串最快的方法是什么?

  27. 27

    Ruby:为什么Hash === {}返回true?

  28. 28

    为什么Ruby #hash方法是随机的?

  29. 29

    为什么我可以在HashMap中使用字符串作为键?

热门标签

归档