"Module und Datenexport" oder muss ich `in Ruhestand?
Philipp Hasenfratz
- perl
Halihallo
Bin irgendwie blablabla, da programmiert man irgendwas grosses und weiss nicht einmal mehr, wie man Variablen exportiert ;-(
Ich seh irgendwie den Wald vor lauter Bäumen nicht mehr. Wäre froh, wenn ihr etwas abholzen helft :
Ich hab'n Modul, das die einen bestimmten Hash iniziiert, der anschliessend (mit Inhalt!) im Hauptprogramm zu gebrauchen sein soll.
und so sieht's aus:
package mymod;
use strict;
no strict "refs";
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
use Exporter;
$VERSION = 2.06;
@ISA = qw(Exporter);
@EXPORT = ('%HASH'); # so exportier den Scheisshash doch endlich!!!
sub _GetHash
{
[...]
return %tmpHASH;
}
my %HASH = &_GetHash;
1;
im Hauptprogramm:
use strict;
use mymod;
use Data::Dumper;
print Dump(%HASH);
hier sollte er jetzt den im Modul mymod iniziierten Hash %HASH ausgeben, tut er aber nicht und strict gibt noch nicht einmal einen Fehler aus, also: Wo zum Henker mache ich was falsch?
Danke für's zuhören (und eine eventuelle Antwort)
Philipp
Hoi,
Bin irgendwie blablabla, da programmiert man irgendwas grosses
und weiss nicht einmal mehr, wie man Variablen exportiert ;-(
Am besten gar nicht!
Ich hab'n Modul, das die einen bestimmten Hash iniziiert, der
anschliessend (mit Inhalt!) im Hauptprogramm zu gebrauchen sein
soll.
Tu das nicht, bitte.
Nun gut, der Code waere so z. B. richtig:
package mymod;
use strict;
use vars qw(@ISA @EXPORT $VERSION %HASH);
use Exporter;
$VERSION = 2.06;
@ISA = qw(Exporter);
@EXPORT = qw(%HASH); # IMHO schoener als ('%HASH')
sub _GetHash
{
[...]
return %tmpHASH;
}
%HASH = &_GetHash;
1;
hier sollte er jetzt den im Modul mymod iniziierten Hash %HASH
ausgeben, tut er aber nicht und strict gibt noch nicht einmal
einen Fehler aus, also: Wo zum Henker mache ich was falsch?
Der Fehler liegt im 'my %HASH'. Eine mit 'my' angelegte Variable
*kann* nicht exportiert werden, sie erhaelt gar keinen Eintrag in
der Symbol-Tabelle des Moduls.
Gruesse,
CK
Halihallo
Also doch nicht Ruhestand, danke für die Hilfe ;-)
Bin irgendwie blablabla, da programmiert man irgendwas grosses
und weiss nicht einmal mehr, wie man Variablen exportiert ;-(
Am besten gar nicht!
Ja, ich gebe dir recht, das man das nicht tun sollte, aber in meinem Fall macht es eben Sinn. Das Modul wird nur für ein Projekt gebraucht und dieser Hash muss eben jedem Programm zugänglich gemacht werden. Da ist es schon schön, wenn der Hash gleich exportiert wird, statt ihn durch einen Funktionsaufruf einzulesen.
Ich hab'n Modul, das die einen bestimmten Hash iniziiert, der
anschliessend (mit Inhalt!) im Hauptprogramm zu gebrauchen sein
soll.
Tu das nicht, bitte.
;-)
keine Angst, ich werd's nur dieses Mal tun ;-)
Nun gut, der Code waere so z. B. richtig:
use strict;
use vars qw(@ISA @EXPORT $VERSION %HASH);
Aha! - einfach den %HASH mit use vars exportieren und nicht mit my deklarieren? - Sehr gut und einfach. Danke
@EXPORT = qw(%HASH); # IMHO schoener als ('%HASH')
Ja, ich wollte nur sicher gehen, dass es nicht am " liegt. qw ist ja nix anderes als "[...]", wollt's mal mit single-quotes versuchen. Könnte ja sein, dass er versucht %HASH zu interpretieren, o. ä.
Der Fehler liegt im 'my %HASH'. Eine mit 'my' angelegte Variable
*kann* nicht exportiert werden, sie erhaelt gar keinen Eintrag in
der Symbol-Tabelle des Moduls.
Oha. Vielen Dank für deine Hilfe, hat funktioniert.
Philipp