Arrays Perl数组哈希-严格引用

Arrays Perl数组哈希-严格引用,arrays,perl,hash,strict,Arrays,Perl,Hash,Strict,这对大多数人来说可能很简单,但我有一个Perl脚本,其中我使用的是strict,并使用以下语法: $welcome_data[$x]{email} = $data[0]; 它很好用。现在,当我启用strict时: $welcome_data[$x]{email} = $data[0]; Can't use string ("") as a HASH ref while "strict refs" in use 有人能帮我解决我做错的事吗 非常感谢 $welcome_d

这对大多数人来说可能很简单,但我有一个Perl脚本,其中我使用的是strict,并使用以下语法:

$welcome_data[$x]{email}       = $data[0];
它很好用。现在,当我启用strict时:

$welcome_data[$x]{email}       = $data[0];
Can't use string ("") as a HASH ref while "strict refs" in use
有人能帮我解决我做错的事吗

非常感谢

$welcome_data[$x]{email}
是的缩写

$welcome_data[$x]->{email}
换句话说,
$welcome\u数据[$x]
应该是一个参考(或undef[1])。但是,在您的例子中,它包含一个空字符串。就像你刚才做的那样

${""}{email}
那显然不是你想做的。但幸运的是,这正是strict refs设计用来捕获的bug。现在,您可以将空字符串分配给
$welcome[$x]
的任何位置进行修复


  • 如果它是未定义的,Perl将为您自动生成对新匿名哈希的引用,就像您使用了

    ( $welcome_data[$x] //= {} )->{email}
    
  • 是的缩写

    $welcome_data[$x]->{email}
    
    换句话说,
    $welcome\u数据[$x]
    应该是一个参考(或undef[1])。但是,在您的例子中,它包含一个空字符串。就像你刚才做的那样

    ${""}{email}
    
    那显然不是你想做的。但幸运的是,这正是strict refs设计用来捕获的bug。现在,您可以将空字符串分配给
    $welcome[$x]
    的任何位置进行修复


  • 如果它是未定义的,Perl将为您自动生成对新匿名哈希的引用,就像您使用了

    ( $welcome_data[$x] //= {} )->{email}
    

  • 回答得好。可能想加入一个链接到什么是自动生命,因为这可能是一个新的概念,他很好的回答。可能想在Autovivation中加入一个链接,因为它可能是一个新概念欢迎来到SO Landon,希望您能够找到您想要的答案,并且很高兴见到一些Perl用户。我可以问一下,为了满足我的好奇心,您正在使用哪个版本的Perl吗?Perl 5.8.8。我要感谢大家,因为我现在已经开始工作了……如果可以的话,我强烈建议您至少升级到5.10或5.12,但是Perl 5的版本要比那些解决重大问题和功能的版本更新得多,从长远来看,这些问题和功能将使您的生活更轻松欢迎来到SO Landon,希望您能够找到您想要的答案,并且很高兴见到一些Perl用户。我可以问一下,为了满足我的好奇心,您正在使用哪个版本的Perl吗?Perl 5.8.8。我要感谢大家,因为我现在让它工作了……如果可以的话,我强烈建议您至少升级到5.10或5.12,但是Perl 5的版本要比那些解决重大问题和功能的版本更新得多,从长远来看,这些问题和功能将使您的生活更轻松