在使用“严格参考”时,不能使用字符串(“6/16”)作为HASH参考

时间:2015-04-13 12:55:36

标签: linux perl hashref

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

$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

我非常感谢有关哪些更改可能导致此问题的建议,以及修复脚本以在两个版本中正常工作的最佳方法。

1 个答案:

答案 0 :(得分:5)

$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}


顺便说一下,只有一个" L"在"家庭"。