[Roma.pm] Mica finisce qui... (our vs. use vars)
Aldo Calpini
dada at perl.it
Mon Aug 6 06:21:57 PDT 2007
che dire... Emanuele ha ragione, non esistono prove inconfutabili del
fatto che our sia deprecato. io del resto lo sapevo benissimo, ma quando
mi sono reso conto che Flavio stava arrampicandosi sugli specchi, gli ho
un po' fatto da spalla, per evitargli di fare una figuraccia... sapete
quant'è sensibile quel ragazzo...
no, eh? :-)
d'accordo, è stato il classico abbaglio di una notte di mezza estate.
derivante anche dal fatto, però, che a me - al di là dell'apprezzamento
ufficiale - our nun me piace proprio. e in questo almeno sento di non
sentirmi del tutto solo :-)
e siccome nutro da sempre una forma di latente sadismo verso gli equini
deceduti, voglio puntualizzare su quanto...
Emanuele Zeppieri wrote:
> Semmai le ambiguità derivano dal fatto che le variabili our rispondono
> simultaneamente a 2 distinte regole di scope: sono visibili solo
> all'interno del blocco in cui sono dichiarate (se non qualificate), ma
> per quanto riguarda l'appartenenza al package seguono le regole di scope della dichiarazione di package, che sono diverse.
>
detta così sembra quasi un complimento! invece... la cosa che trovo
orenda (si, con una erre) è quel "visibile". fondamentalmente, le
variabili our *non* hanno uno scope. ma usandole come variabili di
package *sembra* che ce l'abbiano. prendete ad esempio questo:
{
our $x = 42;
}
print "x=$x\n"; # ==> 42
o perfino questo:
$x = 42;
print "x=$x\n"; # ==> 42
{
our $x = 43;
print "x=$x\n"; # ==> 43
}
print "x=$x\n"; # ==> 43
notate che il primo esempio ha addirittura il coraggio di non compilare
con use strict! il messaggio dice: Variable "$x" is not imported. ma
imported de che?
le variabili our introducono delle variabili di package (o, nel caso del
solo package main, sostanzialmente delle variabili globali), e
delimitarle in uno scope ne altera solo la visibilità da parte di
*altri* package senza qualifica completa. la loro definizione non va mai
out-of-scope (ok, mai fino a fine programma o EOF :-).
quindi:
- non sono "scopabili" come le variabili local
- pur non essendolo, si lamentano con strict quando vengono "scopate"
- sbrodolano la loro visibilità su altri package definiti nello stesso file
non sembra un po' meno bello anche a voi our adesso? :-)
cheers,
Aldo
More information about the Roma
mailing list