Markus Trusk: Code importieren, aber Probleme mit Paketen?

Hi,
Zur besseren Übersicht will ich Code von einer 2. Daten in die Hauptdatei mit require 'settings.pl'; importieren. Es sind 4 Variablen, die mit my definiert wurden. Jetzt habe ich aber das Problem, dass das Hauptscript die Variablen nicht anerkennt.
(Global symbol "$database" requires explicit package name at C:/Apache2/www/vinyldb/register.pl line 214.)
Wie schaffe ich es die importierten Zeilen vom Hauptscript verwenden zu lassen?

Markus Trusk.

  1. Hallo Markus,

    Zur besseren Übersicht will ich Code von einer 2. Daten in die Hauptdatei mit require
    'settings.pl'; importieren. Es sind 4 Variablen, die mit my definiert wurden. Jetzt habe
    ich aber das Problem, dass das Hauptscript die Variablen nicht anerkennt.
    (Global symbol "$database" requires explicit package name at
    C:/Apache2/www/vinyldb/register.pl line 214.)
    Wie schaffe ich es die importierten Zeilen vom Hauptscript verwenden zu lassen?

    perldoc Exporter

    package settings;

    require Exporter;

    our @ISA = qw(Exporter);
    our @EXPORT_OK = qw($var);

    our $var = 1;

    1;

    ==============snip==================

    use settings qw($var1);

    print $var1,"\n";

    Grüße,
     CK

    --
    Ich bewundere wirklich den Sinn der Bienen für kollektive Verantwortung. Obwohl sich einzelne Bienen hin und wieder bekämpfen, herrscht zwischen Ihnen grundsätzlich ein starkes Gefühl für Eintracht und Zusammenarbeit. Wir Menschen gelten als sehr viel weiter entwickelt, doch mitunter rangieren wir sogar hinter kleinen Insekten.
    1. Hi,
      hmmm. Ich weiß nicht, aber ist das nicht nur für Module gedacht?
      Das, was ich importieren will, ist aber normaler Code, der eben 4 my Variablen enthält, da ich die Datenbankeinstellungen in mehreren Scripts gleichzeitig verwenden will, sodass man sie nicht extra in jedem Script ändern muss, wenn man eine andere Datenbank angeben will.

      Markus Trusk.

      1. Hallo Markus,

        hmmm. Ich weiß nicht, aber ist das nicht nur für Module gedacht?
        Das, was ich importieren will, ist aber normaler Code, der eben 4 my Variablen enthält,
        da ich die Datenbankeinstellungen in mehreren Scripts gleichzeitig verwenden will, sodass
        man sie nicht extra in jedem Script ändern muss, wenn man eine andere Datenbank angeben will.

        Sowas nennt man in Perl allgemeinhin Modul ;-)

        Grüße,
         CK

        --
        Ihr wisst nicht, wie man den Menschen dient. Wie sollt ihr wissen, wie man den Goettern dienen soll?
  2. Zur besseren Übersicht will ich Code von einer 2. Daten in die Hauptdatei mit require 'settings.pl'; importieren. Es sind 4 Variablen, die mit my definiert wurden. Jetzt habe ich aber das Problem, dass das Hauptscript die Variablen nicht anerkennt.

    Es gibt mehrere Möglichkeiten, die von Christian ist letztlich die umständlichste wenn du viele 'settings' importieren willst, da du für jede Variabel die gleiche Prozedur wiederholen musst.

    Einmal gibt es das Modul Config::IniFiles mit dem man, ähnlich wie in windows ini Files, Variabeln definieren kann.

    Oder du verwendest ein HASH in deinem Modul und exportierst das.

    package Ini;

    require Exporter;

    @ISA = qw(Exporter);
    @EXPORT = qw(%INI);

    %INI = (
    var1 => 'wert',
    var2 => 'wert 2',
    ...

    );

    in deinem Programm:

    use Ini;

    print $INI{var1};

    Struppi.

    1. Hallo,
      danke dir, hat geklappt :)

      Markus Trusk.

      1. Das Blöde ist aber, dass man in settings.pm einfach hineinschauen kann, indem man einfach die Adresse zur datei in der URL Bar eingibt (wenn man sie weiß), aber da dort Datenbankpasswörter usw gespeichert sind, ist mir das ehrlich gesagt zu riskant. Deswegen wollte ich eigentlich die Datei settings.pl nennen, aber da funktioniert das importieren wieder nicht.
        ([Sat Apr 03 10:20:43 2004] [error] [client xxx.xxx.xxx.xxx] Execution of C:/Apache2/www/vinyldb/importtest.pl aborted due to compilation errors.
        , referer: http://xxx.xxx.xxx.xxx/vinyldb/

        1. use Mosche;

          Das Blöde ist aber, dass man in settings.pm einfach hineinschauen kann, indem man einfach die Adresse zur datei in der URL Bar eingibt (wenn man sie weiß), aber da dort Datenbankpasswörter usw gespeichert sind, ist mir das ehrlich gesagt zu riskant. Deswegen wollte ich eigentlich die Datei settings.pl nennen, aber da funktioniert das importieren wieder nicht.

          1. Leg sie außerhalb des DocumentRoot
            1a)mach ein eigenes Perl-Libdir (perldoc lib) und tu das darein. Wichtig - kein Zugriff darauf von außen (außerhalb des DocumentRoot oder mit 3)).
          2. Apache hat in seiner Standard-Konfiguration bereits den Zugriff auf Dateien gesperrt, die mit '.ht' beginnen. Benenne also deine pm-Datei entsprechend.
          3. Sperre den Zugriff auf '*.pm' Dateien (zB in .htaccess, httpd.conf)
            <FilesMatch ".pm$">
               Deny from all
            </FilesMatch>

          Probier das in der Reihenfolge

          use Tschoe qw(Matti);

          --
            Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    2. Hallo Struppi,

      Es gibt mehrere Möglichkeiten, die von Christian ist letztlich die umständlichste wenn du
      viele 'settings' importieren willst, da du für jede Variabel die gleiche Prozedur
      wiederholen musst.

      Den Weg zur Exportierung eines Hashes habe ich dem OP getrost überlassen.

      Grüße,
       CK

      --
      So, wie ein Teil ist, ist das Ganze.