Gibt es in Perl jemals einen Unterschied zwischen den folgenden zwei Konstrukten:
%Vor%und
%Vor% Sie scheinen die gleiche Funktion zu haben (Aliasing aller Slots in *main::foo
zu denen, die in *main::bar
definiert sind), aber ich frage mich nur, ob diese Äquivalenz immer gilt.
Vielleicht nicht die Art von Unterschied, nach der Sie gesucht haben, aber es gibt zwei große Unterschiede zwischen *main::foo
und $main::{foo}
; das erste sieht den Glob im Stash zur Kompilierzeit nach und erstellt ihn bei Bedarf, während letzterer zur Laufzeit nach dem Glob im Stash sucht und ihn nicht erstellt.
Dies kann einen Unterschied machen für alles andere, was im Stash herumstochert, und es kann sicherlich beeinflussen, ob Sie eine used only once
Warnung erhalten.
Das folgende Skript:
%Vor%Ausgaben:
%Vor% Wenn also *main::foo = *main::bar;
nicht dasselbe tut wie $main::{foo} = $main::{bar};
, dann weiß ich nicht, wie man einen praktischen Unterschied erkennt. ;) Aus einer Syntaxperspektive kann es jedoch Situationen geben, in denen es einfacher ist, eine Methode gegenüber einer anderen zu verwenden. ... es gelten immer die üblichen Warnungen, dass in der Symboltabelle herumgespielt wird.
Tags und Links perl alias typeglob perl-stash