conf.pl als zentrale Konfiguration verwenden nur wie?
MatzeA
- perl
0 Christian Kruse0 MatzeA
0 Erwin0 MatzeA0 Christian Kruse0 MatzeA0 Daniela Koller0 MatzeA
0 MatzeA
Servus,
seit ein paar Tagen suche ich schon und probiere hin und her.
Ich möchte eine einzige Konfigurationsdatei für alle Anwendungen verwenden. Dort sollen direkt bestimtme Variablen und Werte eingestellt werden.
#Konfiguration
require "./conf/cfg.cgi" ;
So habe ich diese eingebunden aber was auch immer in dieser conf. Datei definiert ist.... ich komm irgendwie nicht ran.
Wie gehts wirklich hat mir jemand einen Tip?
Vielen Dank schon mal.
Gruss Matze
Hallo MatzeA,
So habe ich diese eingebunden aber was auch immer in dieser conf. Datei definiert ist.... ich
komm irgendwie nicht ran.
Wie gehts wirklich hat mir jemand einen Tip?
Nein. Meine Glaskugel ist letztens 'runtergefallen und hat jetzt 'nen Sprung. Heisst: das
kommt darauf an, wie du deine Daten da angibst. Näheres bitte.
Grüße,
CK
Servus,
nun ein Auszug aus der lib/conf.cgi
#!/usr/perl/bin/perl
#Pfad zu den Daten
$dat_dir="./data" ;
$mess_dir="./data/messages" ;
#Angabe der Daten Dateien
$topic_file="./data/topic.lst" ;
$theme_file="./data/theme.lst" ;
$about_file="./data/about.lst" ;
$text_file="./data/wmbb.txt" ;
$log_file="./data/wmbb.log" ;
$session_file="./data/wmbb.ses" ;
$usr_file="./data/wmbb.usr" ;
$id_file="./data/wmbb.count" ;
$formtmpl = "./tmpl/formular.tmpl";
$feedbtmpl = "./tmpl/thx.tmpl";
$titel = "mysite.org";
1 ;
aus der vom Browser aufgerufenen getpage.cgi wird diese obige Datei entsprechend geladen.
Hier die eigentliche Fukrions Datei.
#!c:\perl58\bin\perl.exe
###########################################################################
#use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
#Wechsel in das aktuelle Verzeichnis
$0 =~ /^(.*)[/\].*/ && chdir ($1) ;
#Pfad+Name des Hauptprogrammes (wichtig)
require "./lib/wmbb.cgi" ;
require "./config/wmbbconf.cgi" ;
use vars qw($title);
my $query = new CGI;
my $date = &date();
my $aktion = $query->param('aktion');
my $messtxt = "";
$title=$titel;
usw.....
naja auf jeden Fall läuft das Zeug jetzt.
Fragt mich nicht warum, aber solche "umfangreiche Änderungen" scheint mein Apache bzw. Perl nicht auf anhieb zu mögen.
Das das ganze Zeug lokal läuft und dem IE gesagt wurde, nicht`s zwischenspeichern, frage ich mich wie derartige wirre Probleme auftretten können.
z.B. habe ich im script irgendwann folgendes Variable in eiem Print ausgegeben.
print "$dat_dirmain.dat";
Na gut ging nicht.
Hab vermutet, dass er gerne besser unterscheiden würde, was variable und was der Rest ist.
Na gut warum nicht.
print "$dat_dir\main.dat";
Nun klappte der Print.
Ich dachte mir, kann es eigentlich nicht sein...
setze es zurück.
print "$dat_dirmain.dat";
Es klappt immer noch auch mit einem anderen Browser.
Mmmmhhh.
Gruss Matze
Wie schon gesagt, es klappt.
Danke nochmals.
Hallo MatzeA,
package config;
#Pfad zu den Daten
$dat_dir="./data" ;
our $dat_dir = './data';
$mess_dir="./data/messages" ;
our $mess_dir...
#Angabe der Daten Dateien
$topic_file="./data/topic.lst" ;
our $topic_file...
Laden der Übergabe Werte:
use vars qw($title);
my $title = $config::title;
Fragt mich nicht warum, aber solche "umfangreiche Änderungen" scheint mein Apache bzw.
Perl nicht auf anhieb zu mögen.
Quatsch.
print "$dat_dirmain.dat";
Hier ist die Variable dat_dirmain gemeint.
print "$dat_dir\main.dat";
Hier ist die Variable $dat_dir gemeint.
Grüße,
CK
Servus,
gut soweit zum Package.
Hätte ich zwar nicht erstellt aber ok.
my $title = $config::title;
Tippfehler ;-))
my $title = $config::titel;
Fragt mich nicht warum, aber solche "umfangreiche Änderungen" scheint mein Apache bzw.
Perl nicht auf anhieb zu mögen.Quatsch.
»»
Wirklich ernsthaft ohne [STRG] + F5 bekomme ich die meisten Änderungen nich zu Gesicht.
Besonders bei ganz neuen Anwendungen (Scripten) happert es grundsätzlich erst mal.
print "$dat_dirmain.dat";
Hier ist die Variable dat_dirmain gemeint.
print "$dat_dir\main.dat";
Hier ist die Variable $dat_dir gemeint.
Ja und nein eigentlich sollte unter Perl das \ nicht zwingend notwendig sein.
Er kapiert es ja auch leider nicht auf anhieb....
So würde Deine Aussage auf jeden Fall stimmen.
print $dat_dirmain.dat;
Hier ist die Variable dat_dirmain gemeint.
print $dat_dir\main.dat;
Hier ist die Variable $dat_dir gemeint.
Gruss Matze
Hallo MatzeA,
gut soweit zum Package.
Hätte ich zwar nicht erstellt aber ok.
Anders ist es sauber nicht möglich.
Fragt mich nicht warum, aber solche "umfangreiche Änderungen" scheint mein Apache bzw.
Perl nicht auf anhieb zu mögen.Quatsch.
Wirklich ernsthaft ohne [STRG] + F5 bekomme ich die meisten Änderungen nich zu Gesicht.
Besonders bei ganz neuen Anwendungen (Scripten) happert es grundsätzlich erst mal.
Dann cached dein Browser die Ergebnisse. Aber Perl ist es scheiss egal, ob du eine, fünf
oder 5000 Zeilen ändest.
print "$dat_dirmain.dat";
Hier ist die Variable dat_dirmain gemeint.
print "$dat_dir\main.dat";
Hier ist die Variable $dat_dir gemeint.
Ja und nein eigentlich sollte unter Perl das \ nicht zwingend notwendig sein.
Nein, du kannst natürlich auch eine andere Form benutzen, die Perl erkennen lässt, dass
hier eine Variable zuende ist:
print "${dat_dir}main.dat";
Aber du *musst* Perl mitteilen, dass die Variable hier zuende ist. Ein Interpreter ist
keine KI-Software.
Grüße,
CK
Servus,
Anders ist es sauber nicht möglich.
Das ist wohl war. Aber meistens sind es nurmal schnell gescriptete Helferlein wie
2 -3 Verzeichnise replizieren.
Diff durchführen... wo ich dann doch eher schnell als ordentlich was zusammen scripte.
Mir ging es nur auf den Kecks x mal die gleichen Vezeichnisse aufzuführen.
Dann cached dein Browser die Ergebnisse. Aber Perl ist es scheiss egal, ob du eine, fünf
oder 5000 Zeilen ändest.
Mmmh sollte er nicht tun.
So stelle ich den IE immer ein, dass er grundsätzlich nichts cachen dafür bei dem zugrif auf eine Seite diese Laden soll.
Aber dem IE darf man da ohnehin nicht trauen, dass er das wirklich macht.
Nein, du kannst natürlich auch eine andere Form benutzen, die Perl erkennen lässt, dass
hier eine Variable zuende ist:print "${dat_dir}main.dat";
»»
Die ist bekannt (bzw. bei mir in vergesenheit geraten) zumindest jetzt wo Du es sagst fällts mir wieder ein.
Aber du *musst* Perl mitteilen, dass die Variable hier zuende ist. Ein Interpreter ist
keine KI-Software.
Ich hatte eigentlich im Hinterkopf, dass genau das bei Perl nicht dringend erforderlich ist.
Allerdings der Zuverlässigkeit halber gemacht werden sollte.
Deine Aussage leuchtet zwar ein, erklärt jedoch nicht, warum es, nachdem ich es zurück gestellt habe immer nocht geht.
(Ja gut der Browsercache der einen aufs Kreuz legt vieleicht)
Gruss Matze
Hallo MatzeA,
Dann cached dein Browser die Ergebnisse. Aber Perl ist es scheiss egal, ob du eine, fünf
oder 5000 Zeilen ändest.Mmmh sollte er nicht tun.
So stelle ich den IE immer ein, dass er grundsätzlich nichts cachen dafür bei dem zugrif
auf eine Seite diese Laden soll.
Abhängig von der Version sind die Caching-Algorithmen des IE total buggy.
Aber du *musst* Perl mitteilen, dass die Variable hier zuende ist. Ein Interpreter ist
keine KI-Software.Ich hatte eigentlich im Hinterkopf, dass genau das bei Perl nicht dringend erforderlich
ist.
Doch, ist es. Perl kann nicht wissen, dass du eine Variable mit sehr viel
kürzerem Namen meinst.
Deine Aussage leuchtet zwar ein, erklärt jedoch nicht, warum es, nachdem
ich es zurück gestellt habe immer nocht geht.
Tut es nicht. Browsercache.
Grüße,
CK
Servus,
Abhängig von der Version sind die Caching-Algorithmen des IE total buggy.
Das kann gut sein, bei einigen Systemen, an denen ich definitiv änderungen vorgenommen habe, hat teilweise erst der Wechsel des Arbeitsrechners tatsächlich einen Seiten refresh bewirkt.
Das ist jedoch etwas länger her. 99 oder 2000
Doch, ist es. Perl kann nicht wissen, dass du eine Variable mit sehr viel
kürzerem Namen meinst.
Mmmmh nagut dann muss der trenner hin.
Tut es nicht. Browsercache.
Das probiere ich heute doch gleich noch aus.
Bin erst heute abend an dem Zeug dran aber wie schon gesagt den Effekt von gestern versuche ich nochmals zu rekonstruiren.
Gruss Matze
Servus,
mein Versuch hat tatsächlich ergeben, der IE bescheisst mich.
IE6.0.2800.1106 SP1 usw.
also das aktuellste was MS mit Patches anbietet.
Mmmmh.
Gut dass man noch den Mozilla hat.
Gruss Matz
moin,
seit ein paar Tagen suche ich schon und probiere hin und her.
Ich möchte eine einzige Konfigurationsdatei für alle Anwendungen verwenden. Dort sollen direkt bestimtme Variablen und Werte eingestellt werden.
= z.b.
@admins = qw(otto erwin anna);
1;
=cut
Im Script einbinden mit
require 'conf.pl';
use strict;
use vars qw(@admins);
=fertisch
Eine andere Variante besteht darin, dass du eine INIDatei nimmst
[user]
names=fips fuzzi
[admins]
names=erwin otto anna
Das Modul Config::IniFiles bietet eine erstklassige Schnittstelle dafür.
Gruss, Erwin
Servus,
die 1. Variante finde ich nicht gut.
Vor allem use strict;
bereitet mir so manches Problem.
Aber Deine ine Idee ist gar nicht mal dumm.
Das könnte soger noch besser passen.
Gruss Matze
Hallo MatzeA,
Vor allem use strict;
bereitet mir so manches Problem.
Dann solltest du etwas an deinem Perl-Stil ändern, dringend.
Grüße,
CK
Servus,
manche globale Variable muss halt leider sein.
Gruss Matze
Hi Matze
manche globale Variable muss halt leider sein.
Kannst du ja auch mit use strict. Du musst dann nur our davor schreiben.
Gruss Daniela
Servus,
tja wen ich das gewusst hätte.
Danke aber ich schätze, wenn das mit den ini Dateien soweit klappt hat es sich ohnehin erledigt.
Gruss Matze
Servus,
soweit habe ich eure Ratschläge umgesetzt.
Allerdings bleibt noch eine kleineigkeit offen.
Ein kleiner Schönheitsfehler, den ich gerne beboben hätte.
Da ich etwas faul bin und nicht x mal irgendwelche Variablen definieren möchte zummindest nicht unnötig frage ich mich grad wie mich den ermittelten Wert aus der conf.ini direkt heraus bekomme.
Laut doku sollte es so klappen.
my $testdir=$cfg->val('directories', 'test_dir');
soweit so gut nur hätte ich es gerne wie unten eingebunden.
open (DAT, "< tmpl/sturm.tmpl") || die "Kann das Template -tmpl/vote.tmpl- nicht laden." ;
undef $/ ;
my $back=<DAT> ;
close (DAT) ;
$back =~ s/[MESSAGE]/$mess_txt/g ;
$back =~ s/[PICDIR]/$config::pic_dir/g ;
$back =~ s/[HOME]/$config::back_link/g ;
-->
$back =~ s/[GETPAGECGI]/${$cfg->val('directories', 'test_dir')}/getpage.cgi/g ;
<--
print qq~
<html xmlns="http://www.w3.org/1999/html">
-->
${$cfg->val('directories', 'test_dir')}
<--
~;
Geht das so überhaubt?
Gruss Matze