2016-06-02 7 views
0

Wenn mir jemand helfen könnte, würde ich es sehr schätzen. Zur Zeit arbeite ich an ein paar alten Perl-Skripte zu C# konvertieren, aber dabei über Code in folgenden Syntax ich komme immer:Perl-Hash-Referenzierung

$w{$x}->{y} = $z

verstehe ich die Grundlagen der Hash in Perl, aber ich bin ziemlich neu in Perl im Allgemeinen und ich kann nirgends ein solches Beispiel finden.

Wird nur ein Verweis auf einen Wert eines Schlüssels in einem Hash gespeichert?

+0

Es sollte darauf hingewiesen werden, dass der Pfeil zwischen '{$ x}' und '{y}' völlig unnötig ist. Es tut nichts weh, außer (IMO) Lesbarkeit. Wenn Sie es weglassen, sieht der Ausdruck plötzlich mehr wie eine zweidimensionale Struktur aus, mit der Sie vertrauter sein können, und es ist einfacher zu sehen, dass "% h" in Wirklichkeit ein Hash von Hashes ist. '$ w {$ x} {y} = $ z' –

+1

Vielen Dank für die Klärung Paul, ich stimme Ihnen in Bezug auf Lesbarkeit lol. Das hatte mich für eine Weile stolpern lassen –

Antwort

0

rückwärts arbeiten, wird der Wert von $z dem Schlüssel y eines Hashreferenz Zuordnen, wobei das Bezugs zugeordnet $x eines Hash %w genannt einzugeben.

perl -wMstrict -MData::Dumper -E 'my %h; my $x=1; $h{$x}->{y}=3; print Dumper \%h;' 

$VAR1 = { 
      '1' => { 
        'y' => 3 
       } 
     }; 

In Perl werden die Werte der Liste artigen Datenstrukturen können nur skalare Elemente (einzelne Einheiten), also alles, was unter der ersten Ebene eines Hash muss ein Verweis sein. Ein Verweis ist einfach ein Skalarwert, der einen "Zeiger" auf den fraglichen Artikel enthält.

0

Es besagt, dass Sie einen Hash %w haben, der einen Schlüssel $x enthält. Der Wert hinter dem Schlüssel $x ist eine Referenz auf einen anderen Hash. So referenzieren Sie es mit dem ->, um auf den Schlüssel y zuzugreifen. Der Wert des Schlüssels y wird auf den Wert $z gesetzt.

So wie es aussieht:

%w = ($x => {'y' => $z}) 

Hinweis: Die {} eine Hash-Referenz angeben. (im Grunde ein Zeiger auf einen Hash).