Peter Mairhofer: Globale Variablen

Hallo,

Ich arbeite gerade an einem großen Projekt in Perl. Bis jetzt besitzt es eine Hauptdatei, einige *.pm Module und einen Namensraum, den alle Module und auch die main-Datei verwendet.

1.) Wenn ich jetzt in irgendeinem Modul z.B. "use HTML::Parser" verwende, ist das Modul HTML\Parser dann fuer das gesamte Projekt gueltig? Oder nur fuer die eine Datei? Oder nur fuer den einen Namensraum?

2.) Ich verwende "use strict" um nicht unnoetig Fehler zu machen. Jetzt brauche ich ein paar globale Variablen, die im gesamten Namensraum verfuegbar sein sollen. Wenn ich die jetzt aber deklariere erhalte ich
(...) requires explicit package name at (...)
Stelle ich das "my" davor dann ist die Variable anscheinend *NUR* in der aktuellen Datei gueltig und nicht im aktuellen Namensraum. Stimmt das? Wie definiere ich eine Variable in irgendeinem Modul, die im gesamten Namensraum gueltig sein soll?

Vielen Dank
ptr

  1. Du halt nur den Nippel durch die Lasche ziehn und mit der kleinen Kurbel ganz nach oben drehn, dann erscheint sorfort ein Pfeil und da drücken Sie dann drauf und schon stehn globale Variablen drauf!

    Walter

  2. use Mosche;

    Ich arbeite gerade an einem großen Projekt in Perl. Bis jetzt besitzt es eine Hauptdatei, einige *.pm Module und einen Namensraum, den alle Module und auch die main-Datei verwendet.

    1.) Wenn ich jetzt in irgendeinem Modul z.B. "use HTML::Parser" verwende, ist das Modul HTML\Parser dann fuer das gesamte Projekt gueltig? Oder nur fuer die eine Datei? Oder nur fuer den einen Namensraum?

    Es ist für den gesamten Namensraum gültig. Allerdings kannst du aus anderen Namensräumen darauf zugreifen. Bsp:

    use strict;

    package A;
    use CGI qw(header);

    Package B;
    print main::A::header;

    2.) Ich verwende "use strict" um nicht unnoetig Fehler zu machen. Jetzt brauche ich ein paar globale Variablen, die im gesamten Namensraum verfuegbar sein sollen. Wenn ich die jetzt aber deklariere erhalte ich
    (...) requires explicit package name at (...)
    Stelle ich das "my" davor dann ist die Variable anscheinend *NUR* in der aktuellen Datei gueltig und nicht im aktuellen Namensraum. Stimmt das? Wie definiere ich eine Variable in irgendeinem Modul, die im gesamten Namensraum gueltig sein soll?

    Wenn du in einem "Modul" (also in einer .pm Datei) ein Package deklarierst, solltest du die Variablen, die in diesem Package deklariert werden und die überall benutzt werden, mit Exporter (siehe auch perldoc Exporter) bekannt machen. Andernfalls überlege dir die Benutzung von our() bzw 'use vars qw()' oder teile deinen Quellcode besser auf. Mit ein paar Umstrukturierungen sollte sich dies eigentlich vermeiden lassen.

    use Tschoe qw(Matti);

    --

      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.