Perl数组哈希 - 严格引用

Lan*_*tis 1 arrays perl hash strict

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

$welcome_data[$x]{email}       = $data[0];
Run Code Online (Sandbox Code Playgroud)

它工作正常.现在,当我启用严格:

$welcome_data[$x]{email}       = $data[0];
Can't use string ("") as a HASH ref while "strict refs" in use
Run Code Online (Sandbox Code Playgroud)

谁能帮助我做错了什么?

非常感谢

ike*_*ami 5

$welcome_data[$x]{email}
Run Code Online (Sandbox Code Playgroud)

是的缩写

$welcome_data[$x]->{email}
Run Code Online (Sandbox Code Playgroud)

换句话说,$welcome_data[$x]预计是一个参考(或undef [1]).但是,在您的情况下,它包含一个空字符串.就像你在做的一样

${""}{email}
Run Code Online (Sandbox Code Playgroud)

这显然不是你想做的.但幸运的是,对于你来说,这正是那种严格的错误refs旨在捕获的bug.现在,无论您在哪里分配空字符串,都可以进行修复$welcome[$x].


  1. 如果它是undef,Perl会自动为你提供一个新的匿名哈希引用,就像你曾经使用过一样

    ( $welcome_data[$x] //= {} )->{email}
    
    Run Code Online (Sandbox Code Playgroud)