Thread Fragen zu 'package'
(12 answers)
Opened by Andi123 at 2017-07-28 14:46
Ich habe gerade mal ein wenig rumgespielt...
Wie GwenDragon schon schreibt, standardmäßig nutzt Perl den Namensraum "main". Der wird aber normalerweise nicht explizit benannt, sondern ist halt da und wird genutzt. Nun wird über die "main.pm" einiges definiert und ebenfalls in den Namensraum "main" geladen. Mit "userFunctions" führst Du nun einen vollkommen neuen Namensraum ein und musst nun dafür Sorge tragen, dass im Skript die Funktionen und Variablen des jeweiligen Namensraums benutzt werden. Ein grober Ansatz könnte evtl. sein, die "userFunctions" selber im Skript einzubinden und innerhalb der Funktionen, die in userFunctions.pm definiert werden, den Namensraum "main" explizit anzugeben, wenn Variablen/Funktionen daraus genutzt werden sollen. Beispiel: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package main; use strict; use warnings; use 5.010; our %config = ( foo => "bar", ); sub foo { say "main::foo() says: $config{foo}"; } 1; Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 package userFunctions; use strict; use warnings; use 5.010; sub bar { say "userFunctions::bar() says: $main::config{foo}"; } 1; Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 #! /usr/bin/perl use strict; use warnings; use 5.010; use main; use userFunctions; foo(); userFunctions::bar(); Und wenn man den Exporter benutzt, kann man, wenn man will oder glaubt zu müssen, die Funktionen von userFunctions.pm auch direkt exportieren lassen, damit sie dann im Skript ohne "userFunctions::" voranzustellen, aufgerufen werden können. Aber im Hintergrund schreit es danach, dass dieses Konstrukt u.U. mal auf neue und saubere Beine gestellt werden sollte. meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |