我有一个脚本,其代码如下所示。
$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
我非常感谢有关哪些更改可能导致此问题的建议,以及修复脚本以在两个版本中正常工作的最佳方法。
答案 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}
。