Leser: 1
![]() |
|< 1 2 3 >| | ![]() |
25 Einträge, 3 Seiten |
betterworld+2008-02-03 21:04:35--Das nutzt ein "Feature" aus, was die meiste Zeit eigentlich nur stoerend auffaellt, und zwar, dass my-Variablen in inneren Funktionen zu so einer Art State-Variablen werden.
betterworld+2008-02-03 21:04:35--[...]
Das nutzt ein "Feature" aus, was die meiste Zeit eigentlich nur stoerend auffaellt, und zwar, dass my-Variablen in inneren Funktionen zu so einer Art State-Variablen werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
use 5.010; use strict; use warnings; sub outer() { my $state = 'outer called'; sub inner() { say 'my state is: ', $state // 'uninitialized'; $state = 'inner called' } } inner(); inner(); outer(); inner(); inner();
murphy+2008-02-04 15:00:13--Wo dieses Feature störend sein sollte, kann ich mir eigentlich nicht vorstellen -- wüsstest Du da ein Beispiel?
#Kein Kommentar+2008-02-15 22:35:55--wird mit dem my $f if 0; use strict; kaltgestellt?
1
2
3
4
5
6
7
8
9
sub foo {
my $f = 40 if @_;
print ++$f, "\n";
}
foo(); # 1
foo(); # 2
foo(1); # 41
foo(); # 1
foo(); # 2
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.
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();
print ++$eins::i,"\n"
QuoteOur deklariert doch nichts anderes als eine globale Packagevariable, das ist Jacke wie Hose, da kanst du auch gleich "use vars" schreiben.
KurtZ+2008-02-16 03:52:28--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.
![]() |
|< 1 2 3 >| | ![]() |
25 Einträge, 3 Seiten |