Schrift
[thread]10829[/thread]

my <-> our bzw. use vars qw(...)

Leser: 1


<< >> 4 Einträge, 1 Seite
Gast Gast
 2007-11-19 17:55
#102595 #102595
Hallo Forum,

könnt ihr mir den Unterschied zwischen my und our erklären?
Weiterhin wüßte ich gerne den Unterschied zu Variablen die mittels use vars qw(...) definiert sind?
Ist eine Variable die ich mit my oder our am Anfang meines Scriptes definiert habe global, so das ich aus selbst definierten Funktionen darauf zugreifen kann?

MfG

Schenk
GwenDragon
 2007-11-19 18:37
#102596 #102596
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
use vars () definiert nur die Variable für eine spätere Benutzung im Voraus und ist durch our () abgelöst worden.

Mit our () werden Variablen definiert, die auch außerhalb eines package sichtbar und mit ihrem Namen sprechbar sind.

Bei my () werden Variabeln definiert, deren Gültigkeitsbereich der umschließende Block ist. Das nennt eine lexikalisch lokal.
lichtkind
 2007-11-19 18:52
#102598 #102598
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
kurz und genau, es gibt auch noch local und hinzu kam jetzt nur noch die

state () Variablen mit denen man Closures eleganter formulieren kann als mit my. Sie sind gnauso lexikalisch lokal wie my nur das ihr inhalt gespeichert wird und beim nächsten eintritt in den block weiter verwendet wiird, statt die variable neu zu initialisieren.

local () das gibts schon ne weile (es war ca. das my des alten perl 4) und hat den unterschied zu my: wenn innerhalb des Block in dem sie gültig sind etwas aufgerufen wird, dann sind sie auch in der aufgerufenen routine sichtbar.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Siechfred
 2007-11-20 11:59
#102627 #102627
User since
2007-11-12
30 Artikel
BenutzerIn
[default_avatar]
my erzeugt eine lexikalische Variable, our eine Packagevariable, das sind zwei völlig verschiedene Konzepte.

Mit our wurde ab Perl 5.6.0 use vars abgelöst (das vars-Pragma ist mittlerweile auch als "obsolete" gekennzeichnet). Allerdings ist our m.E. nicht ganz ausgereift, da es zwar eine Packagevariable erzeugt, deren Scope aber lexikalisch ist.

Ansonsten führe Dir mal Coping With Scoping (Deutsche Übersetzung) zu Gemüte.

HTH
Siechfred
<< >> 4 Einträge, 1 Seite



View all threads created 2007-11-19 17:55.