[Roma.pm] Mica finisce qui... (our vs. use vars)

Emanuele Zeppieri ema_zep at libero.it
Thu Aug 2 07:59:26 PDT 2007


Flavio Poletti wrote:

> Che dire? Sia io che Aldo eravamo convinti, ma... sembra che non riesca a
> ritrovare quell'esatto articolo/post/whatever che si scagliava
> pesantemente contro l'uso di our.

In ogni caso è una risposta esauriente e interessantissima ;-)

> Ovid non prende chiaramente posizione riguardo
> ad our, anche se si capisce che non è proprio impressionato dalla sua
> disponibilità ("Interesting to note that the only uses I've found for our
> have been hacking bad code...").

Secondo me il vantaggio sostanziale di our rispetto a use vars, è che 
our è BLOCK-scoped.

Da questo fatto derivano alcune cose di un certo (modesto) interesse, 
come la possibilità di dichiarare variabili package-scoped (sotto use 
strict) anche quando ho due o più dichiarazioni di package nello stesso 
file (sia pure ricorrendo al blocco dopo la dichiarazione di package 
terminata che, come diceva giustamente Aldo, è assolutamente sacrilega).

Al contrario, use vars non è BLOCK-scoped.

Non so se al vecchio Ovid la cosa sia sfuggita o se proprio non gliene 
frega niente perché la ritiene una cosa inutile.

> Personalmente, infine (e questa è una considerazione ortogonale alla
> "deprecabilità" di our), cerco di evitare come la peste le variabili di
> package,

Perfettamente d'accordo...

> per cui non uso né our né use vars, nonostante (come molti altri)
> trovi utile utilizzare our in certe particolari occasioni, come con
> Exporter:
> 
>    package What::Ever;
>    use base 'Exporter'; # ATTENZIONE!
>    our @EXPORT_OK = qw( foo bar baz );

Certo, oppure con la classica $VERSION, che deve essere acceduta 
dall'esterno in una quantità di casi.

Grazie per l'esaurientissima risposta, che da sola varrebbe un articolo 
su Perl.it.
(E che mi permette di tirare un certo sospiro di sollievo 
sull'attendibilità della documentazione ufficiale di Perl ;-)

Ciao,
Emanuele.


More information about the Roma mailing list