【问题标题】:Perl array hash - strict refsPerl 数组哈希 - 严格的 refs
【发布时间】:2019-03-01 17:58:48
【问题描述】:

这对大多数人来说可能很简单,但我有一个 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

谁能帮我解决我做错了什么??

非常感谢

【问题讨论】:

  • 欢迎来到 SO Landon,希望您能够找到您所寻求的答案,并且很高兴见到一些 Perl 用户。我能问一下你用的是哪个版本的 Perl 来满足我的好奇心吗?
  • Perl 5.8.8。想感谢大家,因为我现在可以正常工作了......
  • 如果可以的话,我强烈建议您至少升级到 5.10 或 5.12,但是 Perl 5 的版本比那些解决重大问题和功能的版本要新得多,这将使您的生活更轻松从长远来看

标签: arrays perl hash strict


【解决方案1】:
$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}
    

【讨论】:

  • 好答案。可能想要包含一个链接到什么是自动复活,因为这对他来说可能是一个新概念
猜你喜欢
  • 2014-07-27
  • 1970-01-01
  • 2017-04-08
  • 2011-07-02
  • 2020-07-19
  • 2017-02-24
  • 2014-05-12
  • 1970-01-01
  • 2012-08-22
相关资源
最近更新 更多