Schrift
[thread]8318[/thread]

Definition von Variablen in separater Datei



<< >> 6 Einträge, 1 Seite
Gast Gast
 2006-09-11 23:24
#69727 #69727
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****
pktm
 2006-09-12 01:20
#69728 #69728
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Schau dir mal Config::Auto an. Das könnte deinen Wünschen recht nahe kommen.
http://www.intergastro-service.de (mein erstes CMS :) )
bo
 2006-09-12 10:29
#69729 #69729
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
du versuchst auf das in main deklarierte %label zuzugreifen, deshalb auch die fehlermeldung.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package mobilty;
use strict;
use warnings;

%mobility::label = (
"Blubber" => "17.5",
"MONSTER" => "6.1",
);

package main;
use strict;
use warnings;

print $mobility::label{MONSTER};
alex74
 2006-09-12 22:39
#69730 #69730
User since
2006-09-11
6 Artikel
BenutzerIn
[default_avatar]
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
bo
 2006-09-13 09:50
#69731 #69731
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
use strict ausschalten ist eine ganz schlechte idee!

wenn du das package in einer separaten datei deklarierst, musst du es in main einbinden:
Code: (dl )
1
2
3
4
use strict;
use warnings;
use mobility;
...
alex74
 2006-09-13 13:59
#69732 #69732
User since
2006-09-11
6 Artikel
BenutzerIn
[default_avatar]
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
<< >> 6 Einträge, 1 Seite



View all threads created 2006-09-11 23:24.