在使用 "strict refs" 时不能使用字符串 ("6/16") 作为 HASH 引用

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

我有一个脚本,其中包含如下代码。

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

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

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

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

$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"。