Perl Can';不要将字符串用作哈希引用

Perl Can';不要将字符串用作哈希引用,perl,hash,Perl,Hash,这是我试图访问的结构 Dumper $resourceAudit $VAR1 = '{ \'rh6\' => { \'h\' => 1, \'n\' => 1 }, \'win2k8\' => { \'h\' => 1, \'n\' => 1

这是我试图访问的结构

Dumper $resourceAudit

$VAR1 = '{
  \'rh6\' => {
                    \'h\' => 1,
                    \'n\' => 1
                  },
  \'win2k8\' => {
                     \'h\' => 1,
                     \'n\' => 1
                   },
  \'win2k12\' => {
                        \'h\' => 3,
                        \'n\' => 3
                      },
  \'win2k3\' => {
                     \'h\' => 0,
                     \'n\' => 1
                   },
  \'usim\' => {
                               \'h\' => 4,
                               \'n\' => 4
                             }
}';
因此,我知道$resourceAudit实际上是一个字符串,因此,
%$resourceAudit
肯定会给出
不能将字符串用作哈希引用的错误


是否有任何方法可以绕过此问题并访问
'rh6'
键?

不包含对哈希的引用;它包含一个字符串。该字符串是Perl代码,执行时将返回对哈希的引用。您可以使用
eval EXPR
运行Perl代码

my $data = eval($serialized_data)
   or die("Error executing audit code: $@");

... %$data ...

您可以先尝试使用将字符串转换为Perl哈希。如果您选择
eval
路径,请确保变量不包含任何恶意代码。如果您不清楚这一点:您的变量包含数据结构的字符串表示,而不是数据结构本身。您可以看到这一点,因为引号是转义的
\'rh6\'
,并且因为错误消息说不能使用字符串作为哈希引用。所以,
eval
是你最好的选择,就像@HåkonHægland说的那样工作。谢谢