000
23.02.2007, 15:50 Uhr
~Alfredo
Gast
|
Hallo zusammen,
leider verstehe ich wohl den Befehl 'our' oder 'package' nicht ganz.
our: Jede Variable, die mit our deklariert oder auch ohne eine Deklaration verwendet wird, wird in die Symboltabelle des jeweils aktuellen Packages aufgenommen.
package: Nach dieser Anweisung ist ein bestimmtes Package aktiv, bis eine neue package Anweisung mit einem neuen Packagenamen erscheint.
In untenstehendem Code habe ich mal probiert, ob dieses Verständnis stimmt. Leider nicht. Anstatt 2 1 1
kommt 2 1 2
heraus.
Code: |
#!/usr/bin/perl use strict; use warnings; use 5.6.0;
# Package 'main' ist standardmässig aktiv our $v = 1; # entspricht: $main::v = 1;
# Package 'hallo' ist jetzt aktiv package hallo;
our $v = 2; # entspricht: $hallo::v = 2;
# Da das Package 'hallo' gerade aktiv ist, # ist $v und $hallo::v identisch print "$v\n"; # vermutetes Ergebnis: 2
# Hier muss das Package main explizit genannt werden, # da gerade das Package 'hallo' aktiv ist print "$main::v\n"; # vermutetes Ergebnis 1
# Jetzt ist das Package 'main' aktiv package main;
# $v und $main::v sind nun identisch print "$v\n"; # vermutetes Ergebnis: 1
|
Verwende ich aber nach den Package-Befehlen geschweifte Klammern, so erhalte ich mein erwartetes Ergebnis.
2 1 1
Code: |
#!/usr/bin/perl use strict; use warnings; use 5.6.0;
# Package 'main' ist standardmässig aktiv our $v = 1; # entspricht: $main::v = 1;
# Package 'hallo' ist jetzt aktiv package hallo; { our $v = 2; # entspricht: $hallo::v = 2;
# Da das Package 'hallo' gerade aktiv ist, # ist $v und $hallo::v identisch print "$v\n"; # vermutetes Ergebnis: 2
# Hier muss das Package main explizit genannt werden, # da gerade das Package 'hallo' aktiv ist print "$main::v\n"; # vermutetes Ergebnis 1 }
# Jetzt ist das Package 'main' aktiv package main; { # $v und $main::v sind nun identisch print "$v\n"; # vermutetes Ergebnis: 1 }
|
Woran liegt das? Was bewirken die geschweiften Klammern, so dass sich die letzte Ausgabe ändert?
Wozu braucht man our eigentlich? Meiner Meinung nach ist die Verwendung von our eher zu vermeiden, da es unnötig zu Verwirrungen führt. Besser ist es den Packagenamen explizit zu verwenden, wenn man möchte, dass eine Variable einem bestimmten Package angehören soll.
Wie ist eure Meinung hierzu?
Gruß Alfredo |