Sie können dies tun, indem Sie export_to_level
des Exporters exportieren Methode, um das "Hauptpaket" die Symbole des "anderen" Pakets wie folgt zu exportieren:
Wenn jedoch Some::Other::Module
etwas komplizierter als "export alles" macht, benötigen Sie wahrscheinlich eine bessere Handhabung für @_
.
Ich muss wirklich fragen warum , obwohl - ich kann mir keine Verwendung vorstellen, die mit den Worten "guter Code" kompatibel ist:)
Wenn Sie use foo::bar
aufrufen, geschieht im Wesentlichen folgendes:
(siehe perldoc -f )
So import
wird nie auf foo::wizzy
aufgerufen. Wenn Sie diese Symbole ebenfalls importieren möchten, können Sie BEGIN { foo::wizzy->import }
selbst aufrufen (nach use foo::bar
). Oder, wie Sie gesagt haben, teilen Sie diese beiden Pakete in separate Dateien auf, die viel besser lesbar wären.
(Übrigens, es ist nicht ratsam, Paketnamen mit niedrigeren Gehäusen zu verwenden, da diese normalerweise für Perl-Pragmata reserviert sind.)
Zunächst finde ich es hilfreich, umschließende Klammern zu verwenden, um den Umfang zu kontrollieren, wenn mehrere Pakete in eine Datei gepackt werden. Wenn man das Paket in einen BEGIN-Block einfügt, funktioniert es eher wie ein korrektes use
, das verwendet wurde, um es zu laden, aber das ist meistens, wenn ich das Paket in das Hauptskript packe.
use Foo
ist identisch mit BEGIN { require Foo; Foo->import }
.
Sie haben also zwei Möglichkeiten:
BEGIN{ Foo::Whizzy->import; }
auf. Foo::Bar::import
trigger Foo::Whizzy::import
für das aufrufende Modul. In Foo / Bar.pm:
%Vor%In Ihrem Hauptcode:
%Vor%Tags und Links perl