2017-04-25 1 views
-2

Hier ist die Struktur verwenden, die ichKann Zeichenkette nicht als Hashreferenz

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 
          } 
}'; 

Also zugreifen bin versucht, ich weiß, dass $ resourceAudit tatsächlich eine Zeichenfolge ist und so ist %$resourceAudit sicher, mich zu geben, die Can't use string as a HASH reference Fehler.

Gibt es eine Möglichkeit, die ich umgehen kann und auf den Schlüssel 'rh6' zugreifen?

+1

können Sie versuchen, verwenden Sie [ 'eval'] (https://perldoc.perl.org/functions/eval.html), um die Zeichenfolge in ein Perl ersten –

+2

Hash zu konvertieren Wenn Sie die' eval' Weg gehen Stellen Sie sicher, dass die Variable keinen schädlichen Code enthält. – choroba

+1

Falls Ihnen das nicht klar ist: Ihre Variable enthält eine String-Repräsentation der Datenstruktur, nicht die Datenstruktur selbst. Sie können dies erkennen, weil die Anführungszeichen masked '\ 'rh6 \' sind, und weil die Fehlermeldung besagt, dass _string ** nicht als HASH-Referenz verwendet werden kann. Also, 'eval' ist deine beste Wette, wie @ HåkonHægland sagt. – simbabque

Antwort

2

$resourceAudit enthält keinen Verweis auf einen Hash; Es enthält eine Zeichenfolge. Diese Zeichenfolge ist ein Perl-Code, der bei der Ausführung einen Verweis auf einen Hashwert zurückgibt. Sie können eval EXPR verwenden, um Perl-Code auszuführen.

my $data = eval($serialized_data) 
    or die("Error executing audit code: [email protected]"); 

... %$data ... 
Verwandte Themen