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)
谁能帮助我做错了什么?
非常感谢
$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].
如果它是undef,Perl会自动为你提供一个新的匿名哈希引用,就像你曾经使用过一样
( $welcome_data[$x] //= {} )->{email}
Run Code Online (Sandbox Code Playgroud)