Variablen in externer Datei
R.Schulze
- perl
0 Christoph Schnauß0 R.Schulze0 Jan0 Christoph Schnauß0 Calocybe
Hallo,
Ich möchte Variablen (vorgefüllte Arrays), die oft gebraucht werden, in eine externe Datei legen.
Kann (muss) ich die Variablen dann mit my oder local deklarieren??
Wie muss ich sie einbinden (use(), require() oder do())
Achtung benutze strict !!!
Hallo,
Ich möchte Variablen (vorgefüllte Arrays), die oft gebraucht werden, in eine externe Datei legen.
Kann (muss) ich die Variablen dann mit my oder local deklarieren??
Wie muss ich sie einbinden (use(), require() oder do())Achtung benutze strict !!!
ebenfalls hallo ;-)
das mit den extern abgelegten Variablen ist ein guter Trick. Am einfachstzen geht es, wenn auch diese "externe" Datei ein perl-script mit der Endung .pl ist. Das bindest du über require ein, fertig. Deklaration mit my oder local ist nicht zwingend erforderlich - das hängt vom Rest deines Perl-Scripts ab, ob du das so haben mußt.
Prinzipiell wäre auch eine Einbindung mit use oder do möglich; aber require reicht völlig aus und ist der einfachste Weg.
Christoph S.
ebenfalls hallo ;-)
das mit den extern abgelegten Variablen ist ein guter Trick. Am einfachstzen geht es, wenn auch diese "externe" Datei ein perl-script mit der Endung .pl ist. Das bindest du über require ein, fertig. Deklaration mit my oder local ist nicht zwingend erforderlich - das hängt vom Rest deines Perl-Scripts ab, ob du das so haben mußt.
Prinzipiell wäre auch eine Einbindung mit use oder do möglich; aber require reicht völlig aus und ist der einfachste Weg.Christoph S.
Habich schon probiert, aber leider kommt dann immer folgende Meldung:
Global symbol "mbs_expose_elements" requires explicit package name at insert.pl line 87.<
Wenn ich kein Package einrichte ist es doch MAIN oder und so müßten eigentlich die Variablen exportiert werden.
am besten mit require und ohne my, dann läufts zumindestens, wenn du strict nicht benutzt.
Habich schon probiert, aber leider kommt dann immer folgende Meldung:
Global symbol "mbs_expose_elements" requires explicit package name at insert.pl line 87.<
Wenn ich kein Package einrichte ist es doch MAIN oder und so müßten eigentlich die Variablen exportiert werden.
leg mal deinen Code bitte bei - ohne Code weiß ich nicht, was in "Zeile 87" steht.
Mit require wird nix "exportiert", sondern die Ausführung des Scripts wird an das Vorhandensein bestimmter Werte gebunden.
Christoph S.
leg mal deinen Code bitte bei - ohne Code weiß ich nicht, was in "Zeile 87" steht.
Mit require wird nix "exportiert", sondern die Ausführung des Scripts wird an das Vorhandensein bestimmter Werte gebunden.
Christoph S.
Ok hier der Code aus insert.pl:
#!/usr/bin/perl5 -w
use strict;
use DBI;
use own_html;
use own_mysql;
use own_parseform;
use own_tabledata;
for($x=0; $x<@mbs_expose_elements; $x+=$element_delimit)
{
print "<tr><td> $mbs_names{$mbs_expose_elements[$x]}:</td><td>";
&PrintInput($mbs_expose_elements[$x],$mbs_expose_elements[$x+1],$mbs_expose_elements[$x+2],$FORM{$mbs_expose_elements[$x]});
print " </td></tr>\n";
}
print "<tr><td colspan=2> </td></tr>\n";
#######################################################################################
BLA BLA
und nun own_tabledata.pm:
######################################################################################
package own_tabledata;
use Exporter;
@ISA=('Exporter');
@EXPORT=('$element_delimit','@mbs_expose_elements','@mbs_daten_elements','@mbs_options','@mbs_options_size','%mbs_names','HasElement');
@mbs_expose_elements=(
"Beschreibung", 40,50, "12345",
"Strasse", 40,50, "12345",
"Plz", 5,5, "12345",
"Ort", 40,50, "12345");
@mbs_daten_elements=(
"Preis", 10,20, "12345",
"Wohnfl", 10,10, "1234",
"Zimmer", 10,10, "1234",
"Verf_ab", 10,10, "12345",
"Vermietet", 1,0, "234",
"Baujahr", 10,4, "1234",
"Grundfl", 10,10, "345",
"Heizung", 1,-2, "1234",
"Sonstiges", 29,5, "12345");
$element_delimit=4;
@mbs_options =("Ja","Nein","Gasheizung","Ölheizung","Ofenheizung");
@mbs_options_size =(2,3);
%mbs_names=("Beschreibung","Beschreibung","Strasse","Straße","Plz","Postleitzahl","Ort","Ort","Preis","Preis","Wohnfl","Wohnfläche","Zimmer","Zimmer","Verf_ab","Verfügbar ab","Vermietet","Vermietet","Baujahr","Baujahr","Grundfl","Grundfläche","Heizung","Heizungstyp","Sonstiges","Sonstiges");
#hier ist eigentlich noch ein UP
1;
hm ... versuch einfach mal folgendes: dein package verwandelst du wieder zurück in ein "normales" Script, das ja gerne "own_tabledata.pl" heißen kann, und dann rufst du es bitte _nicht_ über "use" auf, sondern bindest es mit "require" ein. Das müßte es dann gewesen sein, vorausgesetzt, es sind sonst keine weiteren Scriptfehler vorhanden.
Christoph S.
Hi!
Habich schon probiert, aber leider kommt dann immer folgende Meldung:
Global symbol "mbs_expose_elements" requires explicit package name at insert.pl line 87.<
Klar, Du verwendest ja "use strict", und hast die Variablen nicht mit "my" oder "use vars" deklariert ("local" faellt aus weil is nich weil das fuer andere Dinge da ist).
Wenn ich kein Package einrichte ist es doch MAIN oder und so müßten eigentlich die Variablen exportiert werden.
Nicht MAIN, sondern main. Und deswegen wird da auch gar nichts irgendwo hin exportiert, sondern die eingebundene Datei wird fast so behandelt, als wenn der darin enthaltene Code anstelle des requires stehen wuerde. Und deshalb musst Du mit den Variablen eben auch genau so verfahren, wie wenn Du sie gleich in die Hauptdatei schreiben wuerdest, also entweder
my @mbs_expose_elements = ( .... );
oder
use vars qw(@mbs_expose_elements);
@mbs_expose_elements = ( .... );
je nachdem, wie Du die Variablen verwendest (mit my sind sie nur im main-Package sichtbar, mit use vars kannst Du auch aus allen anderen Packages ueber @::mbs_expose_elements oder @main::mbs_expose_elements darauf zugreifen, weil es dann eben globale Variablen sind; aber mit Packages scheinst Du ja nicht zu arbeiten).
So long