Thread use und OO verwirren mich: liegt wahrscheinlich am Namespace (4 answers)
Opened by macMeck at 2003-10-13 15:59

Strat
 2003-10-13 16:24
#62792 #62792
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
es handelt sich um ein Problem mit Exporter: CPAN:Exporter
Kurz gesagt: dein Hauptprogramm laeuft im Package main. Dein Modul1 im Package MyModule1. Der Exporter sagt dem Modul, es soll das Modul in den aktuellen Namensraum des Aufrufers (in diesem Fall main) importieren, sodass da $MyModule::VERSION gleich $main::VERSION wird. soweit - sogut.

Wenn du jedoch ZweitesModul in MyModul einbindest, wird $ZweitesModul::VERSION durch den Exporter in den Namensraum des Aufrufers (=MyModule) importiert, und ueberschreibt somit $MyModule::Version.

die Spezialvariable $VERSION zu exportieren ist somit ziemlich ungeschickt.

In meinen Scripten verzichte ich zu 99% auf den Exporter (bzw. verwende nur EXPORT_OK -> siehe doku) und gebe die Variablen/Subroutinen immer voll qualifiziert an, weil ich finde, es macht das Programm klarer (oder weisst du, von woher nun $VERSION wirklich kommt? oder &GiveMeFive() ?). Also z.B. $MyModule::Version oder MyZweitesModule::Version oder so...

vorhandene Module lade ich meistens mit
use CGI ();
weil die Klammern hinter dem Modulnamen (=leere Liste) diese Namensraumverschmutzung (=Namespacepollution) des Exporters verhindert\n\n

<!--EDIT|Strat|1066048001-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread use und OO verwirren mich: liegt wahrscheinlich am Namespace