Zitat aus perldoc Exporter:
@EXPORT = qw(A1 A2 A3 A4 A5);
@EXPORT_OK = qw(B1 B2 B3 B4 B5);
%EXPORT_TAGS = (T1 => [qw(A1 A2 B1 B2)], T2 => [qw(A1 A2 B3 B4)]);
So weit so gut. Ich habe ein Problem mit drei Modulen, die sich mehr oder weniger gegenseitig verwenden. Unter Windows mit Active Perl (Perl 5.8.6) läuft es problemlos, unter Linux (Perl 5.8.1) bekomme ich folgende Meldung:
"ALL" is not defined in %FeFile::EXPORT_TAGS at /home/usr207/daten/perl/forumeditor/FeGui.pm line 19
Die drei Module werden von fe.pl aus eingebunden mit:
use FindBin;
use lib $FindBin::Bin;
use FeCore qw/:ALL/;
use FeFile qw/:ALL/;
use FeGui qw/:ALL/;
in FeCore.pm steht
use base qw/Exporter/;
our @EXPORT = qw//;
our @EXPORT_OK = qw/%Config @Icon/;
our %EXPORT_TAGS = (ALL => [qw/%Config @Icon/]);
(Und kein anderes Modul wird hier verwendet.)
In FeFile.pm steht:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use FeCore qw/:ALL/;
use FeGui qw/:ALL/; ### ZEILE 19 ###
use base qw/Exporter/;
our @EXPORT = qw//;
our @EXPORT_OK = qw/load
create
save
datei_neu
datei_oeffnen
datei_speichern
datei_speichern_unter
bearbeiten
init/;
our %EXPORT_TAGS = (ALL => [qw/load
create
save
datei_neu
datei_oeffnen
datei_speichern
datei_speichern_unter
bearbeiten
init/]);
und in FeGui.pm steht schließlich
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use FeCore qw/:ALL/;
use FeFile qw/:ALL/;
...
use base qw/Exporter/;
our @EXPORT = qw//;
our @EXPORT_OK = qw/tk_main
anzeige_fenster
hilfe
historie
ueber
open_or_new
tk_ende/;
our %EXPORT_TAGS = (ALL => [qw/tk_main
anzeige_fenster
hilfe
historie
ueber
open_or_new
tk_ende/]);
Was mache ich falsch und warum funktioniert es unter Windows? Kann es an den unterschiedlichen Perl-Versionen (5.8.6/5.8.1) liegen? Ich habe mal testweise das
use FeFile qw/ALL/; in FeGui.pm unter die Exporter-Zeilen verschoben, aber das hat keine Änderung verursacht.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite