0

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

$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

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

4

1 回答 1

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”。

于 2015-04-13T12:59:34.207 回答