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说的那样代码>工作。谢谢