Thread Using a hash as a reference is deprecated (12 answers)
Opened by mika at 2012-11-03 14:54

betterworld
 2012-11-04 10:58
#163033 #163033
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
2012-11-03T14:42:37 mika
Hatte den Text auch nur überflogen, weil mir die Syntax entfallen war...


Man kann sich das recht gut merken, wenn einem klar wird, was jedes einzelne Zeichen bedeutet:

Code (perl): (dl )
1
2
%$ref;
%{$ref};
dereferenziert, also man kommt damit an den Hash hinter der Referenz. (Beide Schreibweisen bedeuten dasselbe.)

Der Pfeil -> vor einer Klammer (in diesem Fall einer geschweiften Klammer) dereferenziert auch, es ist eine vereinfachende Schreibweise.

Um bei einer Hashreferenz auf ein Element zuzugreifen, kann man also eine der folgenden Schreibweisen benutzen:

Code (perl): (dl )
1
2
%{$ref}{blah};
$ref->{blah};


Sie bedeuten beide dasselbe. Die Schreibweise mit dem Pfeil wird von den meisten bekannten Perl-Programmierern bevorzugt.

Wenn Du Dir merkst, dass es diese zwei verschiedenen Methoden zum Dereferenzieren gibt, dann siehst Du auch, warum Deine Schreibweise unsinnig war: Da wurde nämlich gleich zwei Mal dereferenziert. Das sollte eigentlich gar nicht funktionieren. Dass es trotzdem mit einer Warnung funktioniert, war mir auch noch nicht bekannt. diagnostics sagt dazu:

Quote
(D deprecated) You tried to use a hash as a reference, as in
%foo->{"bar"} or %$ref->{"hello"}. Versions of perl <= 5.6.1
used to allow this syntax, but shouldn't have. It is now deprecated, and will
be removed in a future version.

View full thread Using a hash as a reference is deprecated