Hallo Leute,
ich habe folgendes Problem.
Ich möchte die Definition von bestimmten Variablen in eine separate Datei auslagern, damit ich diese Definitíonen in verschiedenen Perl-Programmen benutzen kann, eben so wie Module, jedoch ohne subroutinen, sondern nur Skalar-, Array- und Hashdefinitonen.
Diese Datei möchte ich per "require" oder "use" in mein Skript einbinden und in diesem Skript dann gleich auf diese Daten zugreifen. Genau dieses klappt aber nicht. Wenn ich von meinem Skript auf diese Daten zugreifen will - bekomme ich immer die Fehlermeldung, daß ich auf undefinierte Daten zugreifen will.
Bisher habe ich nur subroutinen in Module ausgelagert und es hat immer wunderbar geklappt - ich habe auch im Kamel-Buch nachgelesen und auch (so mein ich) alles ausprobiert, aber ich komme einfach nicht auf die Lösung. Ich steh komplett aufm Schlauch.
Kann mir jemand helfen?
Danke und Grüsse
Alex
So wollte ich es aufbauen:
****Skript****
my %label;
require "mobility.pm";
print $label{MONSTER};
****Skript****
****"mobility.pm****
%label = (
"Blubber" => "17.5",
"MONSTER" => "6.1",
);
****"mobility.pm****
User since
2003-08-07
2921
Artikel
BenutzerIn
Schau dir mal Config::Auto an. Das könnte deinen Wünschen recht nahe kommen.
User since
2006-05-09
76
Artikel
BenutzerIn
du versuchst auf das in main deklarierte %label zuzugreifen, deshalb auch die fehlermeldung.
package mobilty;
use strict;
use warnings;
%mobility::label = (
"Blubber" => "17.5",
"MONSTER" => "6.1",
);
package main;
use strict;
use warnings;
print $mobility::label{MONSTER};
User since
2006-09-11
6
Artikel
BenutzerIn
Vielen Dank
Habe jetzt in der separaten Datei ein package deklariert (wie von bo gesagt).
In meinem Skript will ich nun das %mobility::label in das %main::label umkopieren um nicht das gesamte Skript anpassen zu müssen.
my %label = %mobility::label;
Dies funktioniert und das Programm läuft nun auch wie gewünscht durch, bekomme aber folgende Meldung:
Name "%mobility::label" used only once: possible typo at ...
Soll ich einfach für das Umkopieren "use strict" ausschalten oder mache ich noch was falsch?
Danke
User since
2006-05-09
76
Artikel
BenutzerIn
use strict ausschalten ist eine ganz schlechte idee!
wenn du das package in einer separaten datei deklarierst, musst du es in main einbinden:
use strict;
use warnings;
use mobility;
...
User since
2006-09-11
6
Artikel
BenutzerIn
Jetzt hab' ichs,
seit ich %mobility::label mit "our" statt mit "my" deklariert habe, ist %mobility::label auch in main sichtbar und schon laeufts wie es sollt'
Vielen Dank für die Hilfe mit den Namensbereichen!
Grüsse
Alex