MatzeA: conf.pl als zentrale Konfiguration verwenden nur wie?

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

  1. 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

    --
    Microsoft: Where do you want to go today?
    Linux: Where do you want to go tomorrow?
    FreeBSD: Are you guys coming, or what?
    1. 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" ;

      Templates

      $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" ;

      Pfad + Name der Configurationsdatei (wichtig)

      require "./config/wmbbconf.cgi" ;

      Laden der Übergabe Werte:

      use vars qw($title);
      my $query     = new CGI;
      my $date      = &date();

      my $aktion    = $query->param('aktion');

      my $messtxt = "";

      Parameter werden von der Formularseite ausgelesen

      $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.

      1. 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

        --
        Es ist uns nicht möglich, in einem Bereich unseres Lebens richtig zu verhalten, wenn wir in allen anderen falsch handeln. Das Leben ist ein unteilbares Ganzes.
        1. 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

          1. 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

            --
            Das Leben ist wie ein Kartenspiel: was dir gegeben wurde, ist vorbestimmt. Doch wie du damit spielst, ist deine Entscheidung.
            1. 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

              1. 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

                --
                Fatal! Ich kann kein Reserve-Offizier mehr sein!
                1. 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

                  1. 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

  2. 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.

    conf.pl

    @admins = qw(otto erwin anna);
    1;
    =cut

    Im Script einbinden mit

    use lib '/path/to/libdir'; # ggf Pfadangabe

    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

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. 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

      1. Hallo MatzeA,

        Vor allem use strict;
        bereitet mir so manches Problem.

        Dann solltest du etwas an deinem Perl-Stil ändern, dringend.

        Grüße,
         CK

        --
        Es ist uns nicht möglich, in einem Bereich unseres Lebens richtig zu verhalten, wenn wir in allen anderen falsch handeln. Das Leben ist ein unteilbares Ganzes.
        1. Servus,

          manche globale Variable muss halt leider sein.

          Gruss Matze

          1. 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

            1. 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

    2. 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