Nehmen wir an, wir haben einen Code wie diesen
%Vor%und das
%Vor%Ich dachte, sie sind gleichwertig, also können wir das tun
%Vor% ob wir die Methode mit vollständig qualifizierten Namen definieren oder nicht Unter bestimmten Umständen sind sie jedoch tatsächlich unterschiedlich. Im Beispiel von perldoc -f require
muss zum Beispiel die Methode INC
vollständig mit dem Paketnamen qualifiziert sein:
Wenn wir den Methodennamen nicht vollständig qualifizieren, tritt ein Fehler bei der Kompilierung auf. Also, was ist der Unterschied zwischen voll qualifizierten Namen und keinem Paketnamen vorangestellt?
Der Mechanismus, der @main::INC
als @INC
global verfügbar macht, bewirkt auch, dass sub INC { }
sub main::INC { }
bedeutet.
Zitieren perlvar ,
Perl-Bezeichner, die mit Ziffern, Steuerzeichen oder Interpunktionszeichen beginnen, sind von den Auswirkungen der
%Vor%package
-Deklaration ausgenommen und müssen immer im Paketmain
; Sie sind auch vonstrict 'vars'
errors ausgenommen. Einige andere Namen sind auch auf diese Weise ausgenommen:
Wenn wir den Methodennamen nicht vollständig qualifizieren, tritt ein Fehler bei der Kompilierung auf.
hum ... Es wird nicht tun, was Sie wollen, aber es wird auch keinen Fehler bei der Kompilierung verursachen.
%Vor% perldoc -f require
gibt an, warum dies so ist:
Wenn der Hook ein Objekt ist, muss er eine INC-Methode bereitstellen, die wie oben beschrieben aufgerufen wird, wobei der erste Parameter das Objekt selbst ist. (Beachten Sie, dass Sie den Namen des Subs vollständig qualifizieren müssen, da unqualifiziertes "INC" immer in das Paket "main" gezwungen wird.)
Es wäre also so, als hätten Sie sub main::INC {}
geschrieben, wenn Sie das Paket-Qualifikationsmerkmal nicht angeben. Ich kann dir nicht sagen, warum das passiert, aber ich vermute, das ist einer der Spezialfälle im Interpreter.
Tags und Links perl