Was ist der Unterschied zwischen sub Foo :: bar {} und sub bar {}, wenn beide zum Paket Foo gehören?

8

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:

%Vor%

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?

    
Cody 22.07.2014, 09:02
quelle

2 Antworten

6

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 package -Deklaration ausgenommen und müssen immer im Paket main ; Sie sind auch von strict 'vars' errors ausgenommen. Einige andere Namen sind auch auf diese Weise ausgenommen:

%Vor%
  

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%     
ikegami 22.07.2014, 13:41
quelle
2

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.

    
Leeft 22.07.2014 13:10
quelle

Tags und Links