首页 > 解决方案 > Perl 数组哈希 - 严格的 refs

问题描述

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

$welcome_data[$x]{email}       = $data[0];

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

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

谁能帮助我做错了什么?

非常感谢

标签: arraysperlhashstrict

解决方案


$welcome_data[$x]{email}

简称

$welcome_data[$x]->{email}

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

${""}{email}

这显然不是你想做的。但幸运的是,这正是 strict refs 旨在捕捉的那种错误。现在,您可以在将空字符串分配给$welcome[$x].


  1. 如果它是 undef,Perl 将自动为您提供对新匿名哈希的引用,就好像您使用过

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

推荐阅读