Markus: Deklaration überall notwendig

Hallo zusammen,

ich habe eine Datei vars.pl in der alle Variablen definiert sind.

Mittels
require "vars.pl" || die("can't find init, $!");
binde ich im Hauptprogramm progr.pl diese ein.

Muss ich die Befehle:
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use strict;

auch in vars.pl definieren oder reicht es wenn diese in progr.pl stehen?

Vielen Dank im voraus..

  1. Muss ich die Befehle:
    use warnings;
    use CGI::Carp qw(fatalsToBrowser);
    use strict;

    auch in vars.pl definieren oder reicht es wenn diese in progr.pl stehen?

    jein. Carp und warnings reicht einmal . strict musst du sowieso nicht, hilft dir aber Fehler zu vermeiden und zu finden.

    Die Frage ist dann wie du die Variabeln einbindest, weil du in dem Falle alle Exportieren musst. Sinnvoller kann es sein entweder ein ini File zu nehmen, oder einen HASH zu exportieren in dem alle Werte als Schlüssel gespeichert sind.

    Struppi.

    1. Hi Struppi,

      in vars.pl steht z.B.

      our ($gPathData,$gPathHome,$gPathCgi);
      our ($gHost,$gIDnr);

      $gPathData = "c:";
      $gPathHome = "d:",

      In prog.pl binde ich dann mit "require vars.pl" ein damit ich diese globalen Variablen nutzen kann.

      Oder ist das die falsche Methode?

      1. in vars.pl steht z.B.

        our ($gPathData,$gPathHome,$gPathCgi);
        our ($gHost,$gIDnr);

        $gPathData = "c:";
        $gPathHome = "d:",

        oder direkt vor der Deklaration das our, aber das ist Geschmackssache.

        In prog.pl binde ich dann mit "require vars.pl" ein damit ich diese globalen Variablen nutzen kann.

        Oder ist das die falsche Methode?

        eigentlich nicht, aber so musst du die Variabeln mit dem Modulnamen ansprechen wenn du strict verwendest.

        Struppi.

        1. Hallo Struppi,

          In prog.pl binde ich dann mit "require vars.pl" ein damit ich diese globalen Variablen nutzen kann.

          Oder ist das die falsche Methode?

          eigentlich nicht, aber so musst du die Variabeln mit dem Modulnamen ansprechen wenn du strict verwendest.

          Ja, aber nur wenn vars.pl einen eigenen Namensraum hat. Und das hat Markus hier anscheinend nicht gemacht.

          Viele Grüße
            Patrick Canterino

          --
          "Du hast die Toilette entweiht, die ich mein Heim nenne!" (Al Bundy)
          1. Hi Patrick,

            nein, den Begriff Namensraum kenne ich nicht.

            Kannst du mir bitte sagen, was ich ändern muss. Die Variablen in vars.pl sollen global in allen Modulen verfügbar sein.

            Danke !

            1. Hallo Markus,

              nein, den Begriff Namensraum kenne ich nicht.

              Das kannst du hier nachlesen:
              http://de.selfhtml.org/perl/funktionen/module.htm#package

              Kannst du mir bitte sagen, was ich ändern muss. Die Variablen in vars.pl sollen global in allen Modulen verfügbar sein.

              Du musst gar nichts ändern. Wenn du es so machst, wie du es bisher gemacht hast, dann sollten dir alle Variablen aus vars.pl in den Scripts, in denen du es einbindest, zur Verfügung stehen.

              Viele Grüße
                Patrick Canterino

              --
              "Ich bin der Meinung, Genossen, mit der Monotonie des 'Yeah, Yeah, Yeah' und wie das alles heißt, sollte man doch Schluss machen. (...) Ist es denn wirklich so, dass wir jeden Dreck, der vom Westen kommt, kopieren müssen?" (Walter Ulbricht)
              1. Hallo Patrick,

                Das kannst du hier nachlesen:
                http://de.selfhtml.org/perl/funktionen/module.htm#package

                Besser hier:
                http://de.selfhtml.org/perl/funktionen/module.htm#allgemeines

                Viele Grüße
                  Patrick Canterino

                --
                "Scherben bringen Glück - aber nur dem Archäologen." (Agatha Christie)
                1. Hi Patrick,

                  danke für die Links.

                  bye

                  Markus

              2. 你好 Patrick,

                Kannst du mir bitte sagen, was ich ändern muss. Die Variablen in
                vars.pl sollen global in allen Modulen verfügbar sein.

                Du musst gar nichts ändern. Wenn du es so machst, wie du es bisher
                gemacht hast, dann sollten dir alle Variablen aus vars.pl in den
                Scripts, in denen du es einbindest, zur Verfügung stehen.

                strict haut dir das Script so um die Ohren, da müsste man den Package-Namen
                (da keiner angeben wurde ist das implizit main) angeben. Besser, man macht
                es richtig, mit Namensräumen; $config::variable ist vor allem auch besser
                lesbar als $variable.

                再见,
                 克里斯蒂安

                --
                Buchpreisbindung? | Plasma-Bildschirm geklaut
                Sobald dir ein Gedanke kommt, lache über ihn.
                http://wwwtech.de/
            2. nein, den Begriff Namensraum kenne ich nicht.

              Grob gesagt, dein Skript läuft im Namesraum main, die Packte bzw. Module gaben ihren eigenen Namensraum.

              Kannst du mir bitte sagen, was ich ändern muss. Die Variablen in vars.pl sollen global in allen Modulen verfügbar sein.

              $main::VarName

              oder use Exporter

              Struppi.

          2. eigentlich nicht, aber so musst du die Variabeln mit dem Modulnamen ansprechen wenn du strict verwendest.

            Ja, aber nur wenn vars.pl einen eigenen Namensraum hat. Und das hat Markus hier anscheinend nicht gemacht.

            Nein, wenn er use strict verwendet.

            Struppi.