【问题标题】:Can't use string ("6/16") as a HASH ref while "strict refs" in use使用“严格引用”时不能使用字符串(“6/16”)作为 HASH 引用
【发布时间】:2015-06-18 19:07:06
【问题描述】:

我有一个脚本,其代码如下所示。

$shelf->print("\nStarted syncing from \"${%Family::MEMBERS}{$member}\" \n");

当我尝试使用 perl(v5.8.8) 在 CentOS 7.0 上本地运行它时,它可以正常工作,但是使用 perl(v5.16.3) 在同一操作系统上运行相同的代码时会出现以下错误。

Can't use string ("6/16") as a HASH ref while "strict refs" in use at

如果您能就可能导致此问题的更改以及修复脚本以在两个版本中正常工作的最佳方法提供任何建议,我将不胜感激。

【问题讨论】:

  • 这确实是错误的。你想做什么?
  • 我已经更新了有问题的代码,实际上我正在打印 $member。

标签: linux perl hashref


【解决方案1】:

$BLOCK{EXPR} 访问由BLOCK 返回的表达式所引用的哈希元素。由于需要引用,因此在标量上下文中评估该块。 %Familly::MEMBERS 不可能导致标量上下文中的引用。 (它会导致错误的值或描述有关哈希的统计信息的字符串。)


你问了什么:

要打印$member,可以使用

print('$member'."\n")
  -or-
print("\$member\n")

你的意思是:

要打印$member的值,可以使用

print("$member\n")

我认为你想要什么:

访问%Familly::MEMBERS的元素,其键是$member的值:

$Familly::MEMBERS{$member}

您使用完全限定名称这一事实不会改变任何事情;语法仍然是$NAME{EXPR}


顺便说一句,“family”中只有一个“L”。

【讨论】:

  • 为最后一行点赞。想写 +1 但不接受。
猜你喜欢
  • 2017-05-25
  • 2022-01-15
  • 1970-01-01
  • 2018-04-08
  • 2020-05-22
  • 2023-03-31
  • 2020-02-21
  • 1970-01-01
  • 2011-12-05
相关资源
最近更新 更多