Skrilax: hashes of hashes

Beitrag lesen

Hallo!

Die Derefenzierungsregeln  haben lauter inkompatible Ausnahmeregeln.

Ehrlich gesagt kann ich nicht ganz nachvollziehen, wo du da eine echte Inkonsistenz siehst, auch wenn ich mit dir übereinstimme, dass es wohl für einen Anfänger arg kompliziert ist.

Der Grund für die scheinbar unterschiedliche Syntax ist doch, dass da auch zwei unterschiedliche Sachen gemacht werden. Einmal der Zugriff auf ein Hashelement _ohne_ vorherige Derefferenzierung, und einmal _mit_ vorheriger Dereferenzierung, weil der vorstehende Wert keine Variable, sondern eine Referenz ist.

$hash{dim1}{dim2}{dim3}

eine Kurzschreibung für

$hash{dim1}->{dim2}->{dim3}

^^^
auch bei diesem Beispiel fehlt bei dem Hashzugriff der Derefferenzierungsoperator

aber

$ref{dim1}

ist KEINE Kurzschreibung für

$ref->{dim1} bzw $$ref{dim1}

exakt, genau wie

$hash->{dim1}->{dim2}->{dim3}

keine Kurzform für

$hash{dim1}{dim2}{dim3}

ist. Aber nur in der Form wären es analoge Beispiele.

Diese Inkosistenz hat soviele in den Wahnsinn getrieben, das  in Perl6 radikal aufgeräumt wird.

Dort steht

%hash{'dim1'} dann für das Hashelement  (statt perl5 $hash{dim1})

sodass eindeutig gilt
$ref{'dim1'} == $ref->{'dim1'}

Das wurde glaubich "Everything is a reference" benannt, oder? Auf jeden Fall ist es einfacher zu verstehen und wohl auch weniger fehleranfällig, wenn das Sigil vom tatsächlichen Variablentyp und nicht vom Rückgabetyp des Aufrufes abhängig ist :)

Grüße, Skrilax

--
Democracy is a device which ensures that we shall be governed no better than we deserve.
(G. B. Shaw)