Thread static variable (24 answers)
Opened by #Kein Kommentar at 2008-02-03 18:46

KurtZ
 2008-02-16 04:52
#105956 #105956
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
betterworld+2008-02-03 20:58:26--
Also mit our() wuerde das (ab 5.6 oder so) auch gehen. Der Nachteil waere dann nur, dass man nicht in zwei verschiedenen Funktionen im selben Paket eine Variable vom gleichen Namen nehmen darf.


Our deklariert doch nichts anderes als eine globale Packagevariable, das ist Jacke wie Hose, da kanst du auch gleich "use vars" schreiben.

Das Scoping von Our regelt nur, wo die Variable benutzt werden darf (d.h. strict meckert nicht) und in welchem Namensraum sie abgespeichert wird.

Mit 'package' kriegt man nämlich auch mit globalen Variablen sowas wie Closures
(für Arme) hin!


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use strict;
use warnings;


{
    package eins;
    our $i;
    package main;
    sub inc1{
        print ++$i,"\n";
    }
}



{
    package zwo;
    our $i=10;
    package main;
    sub inc2{
        print ++$i,"\n";
    }
}

inc1();
inc2();
inc1();
inc2();


Man hätte natürlich auch gleich sowas schreiben können:
Code (perl): (dl )
print ++$eins::i,"\n"

aber obige Lösung lässt sich einfacher erweitern
TMTOWTDYOG (there's more than one way to dig your own grave)

View full thread static variable