Gast+2008-04-27 21:29:59--Ach so. Das heißt, wenn ich die Variable in einem Modul verwenden will (was ich vor habe) muss ich sie zwangsläufig per $Packagename::Variablenname aufrufen?
du kannst mal ein ziemlich langes Streitgespräch dazu nachlesen
Konzept der Namensräume; Global, Dynamic und Lexical Scope , steht leider auch öfters was falsches drin, achte deswegen auf die Chronologie.
Die Kurzform
Es gibt 2 Arten von Variablen in Perl, welche Sorte du verwendest hängt von der letzten Deklaration im gleichen Scope ab.
(Ohne
use strict sind undeklarierte Variablen automatisch Packagevariablen, mit
use strict muss jeder Variablenname deklariert werden.)
Packagevariablen sind Variablen die in öffentlichen Namensräumen abgelegt werden (auch Dateiübergreifend nutzbar)
Lexikalische Variablen werden in einem unbenannten, privaten Raum des Geltungsbereich (Scope) abgelegt, also der umgebende Klammernblock oder Funktion, maximal aber die aktuelle Datei.
Deklarationen wirken nur in ihrem Geltungsbereich (wie gesagt maximal aktuelle Datei) und müssen außerhalb falls nötig wiederholt werden.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package xxx;
{
our $public;
my $private;
}
um letztendlich deine Frage zu beantworten:
Solange in deinem aktuellen Scope auf ein
package Packagename ein
our $variablenname folgt, kannst du im ganzen Scope
$variablenname statt
$Packagename::variablenname schreiben.
Steht das am Anfang der Datei, gilt das sogar für die ganze Datei (äußerster Scope) siehe auch
perldoc -f our
TMTOWTDYOG (there's more than one way to dig your own grave)