CPAN: Hashkeys/Barewords

Beitrag lesen

In Perl isses so, dass an $hash{$key}; grundsätzlich ein Scalar in $key erwartet wird, wobei Perl auch nicht zwischen Numbers und Strings unterscheidet.

Du hattest eigentlich über die unmaskierten Bezeichner als Hashkey geredet. Diese unterliegen denselben Beschränkungen wie Barewords! Das macht viel aus.

Eine Einschränkung hast du genannt, Umlaute. Ich generalisiere das mal auf die Unicodezeichenklasse IDC. Diese Einschränkung wird aufgehoben durch die Verwendung des Pragmas utf8, ist also kein Problem in der Praxis.

Die zweite Einschränkung sind Leerzeichen. Das ist einleuchtend.

Die dritte Beschränkung umfasst Bezeichner, die mit Zahlen anfangen, z.B. enthält folgendes Programm einen Syntaxfehler:

  
my %a = (9j => undef);  

Man mag daraus schlussfolgern, dass es aus Gründen der Konsistenz es guter Stil ist, gleich alle Bezeichner zu maskieren. So verwundert es nicht, dass in PHP die für den Parser verantwortlichen Leute die Verwendung von Maskierungszeichen für Hashkeys erzwingen, wie in anderen Sprachen auch. Barewords sind nämlich immer ein Ärgernis/Stolperfalle in Perl, siehe auch Misparsing von Klassennamen als Subs oder Globs in Methodenaufrufen.