Thread Fragen zu 'package' (12 answers)
Opened by Andi123 at 2017-07-28 14:46

Linuxer
 2017-07-28 16:25
#187038 #187038
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
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:

main.pm (2.1kb):

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;



userFunctions.pm (1.5kb):

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;




script.pl (1.5kb):

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 Perldoc: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!

View full thread Fragen zu 'package'