Thread Package ruft Funktion aus anderem Package auf?
(17 answers)
Opened by BratHering at 2005-11-27 16:12
Okay, ich habe das mit dem "." mal ausprobiert, mit und ohne use lib und ganz ohne FindBin (was man vernuenftigerweise sonst immer benutzen sollte).
Ich habe hier ein Skript useModules.pl mit folgendem Inhalt: Code: (dl
)
1 #!/usr/bin/perl Das Modul Foo::Bar liegt in ./Foo/Bar.pm, also ein Verzeichnis unterhalt von useModules.pl. Es benutzt keinen Exporter o.ae., aber den brauche ich ja auch nicht, wenn ich die Funktion qualifiziert aufrufe. So sieht's aus: Code: (dl
)
1 package Foo::Bar; Das in Foo::Bar benutzte Modul Foo::Bar::Baz wiederum liegt in ./Foo/Bar/Baz.pm und sieht fast identisch aus: Code: (dl
)
1 package Foo::Bar::Baz; Wenn ich nun das Programm useModules.pl ausfuehre, kommt folgendes heraus: Code: (dl
)
1 $ ./useModules.pl Funktioniert also. Foo::Bar wird gefunden, und von dort aus Foo::Bar::Baz auch. Von der Ausgabe her koennte man denken, dass das use lib '.' nur das aktuelle Verzeichnis von ganz hinten in @INC nach ganz vorne nimmt. Ohne use lib '.' sollte es also eigentlich keinen Unterschied machen: Code: (dl
)
1 #!/usr/bin/perl Aber Pustekuchen! Die Ausgabe sieht jetzt so aus: Code: (dl
)
1 $ ./useModules.pl Man beachte: Die Fehlermeldung kommt nicht vom use Foo::Bar! Das Modul wird also gefunden, aber die Funktion output() darin nicht. Ich gebe zu, dass ich dieses Verhalten nicht verstehe. Edit: Das Forum hat zweimal _ _PACKAGE_ _ geschluckt. Bitte (wie ueblich) die Leerzeichen wegdenken / nach paste korrigieren.\n\n <!--EDIT|Dubu|1133184386--> |