[Roma.pm] Mica finisce qui... (our vs. use vars)
Flavio Poletti
flavio at polettix.it
Thu Aug 2 07:02:14 PDT 2007
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.
Nel cercare, ho trovato questo articolo di tilly su PM:
http://www.perlmonks.org/?node_id=48379
al quale Larry Wall ha risposto circa quattro anni dopo con questo:
http://www.perlmonks.org/?node_id=393672
in cui sostanzialmente dice che our ha una utilità marginale in P5 ma
pensato in ottica futura P6. Il che è anche confermato dal fatto che our è
ancora vivo e vegeto in Perl 6, affiancato da svariate altre forme di
dichiarazione di variabile (v.
http://dev.perl.org/perl6/doc/design/syn/S03.html):
my $foo # ordinary lexically scoped variable
our $foo # lexically scoped alias to package variable
has $foo # object attribute
state $foo # persistent lexical (cloned with closures)
constant $foo # lexically scoped compile-time constant
E' inoltre interessante notare che L. Wall contraddice parzialmente tanto
il proprio libro quanto la documentazione:
Something that seems to be missed every time this discussion is
referenced is that the main purpose of our is not to replace
use vars, but to serve as a syntactic peg upon which lexically
scoped traits can be hung.
Un altro articolo utile per le litig*COUGH*riflessioni a seguire è il
seguente:
http://www.perlmonks.org/?node_id=105446
in cui Ovid puntualizza come our sia profondamente differente da my. Ora,
l'ignoranza non è una scusa (e sicuramente chi usa our dovrebbe sapere che
"'our' is not 'my'"!!!), ma vale comunque la pena riflettere un attimo
sulla profonda differenza nella natura delle variabili dichiarate con my e
"fatte emergere" con our. 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...").
Personalmente, infine (e questa è una considerazione ortogonale alla
"deprecabilità" di our), cerco di evitare come la peste le variabili di
package, 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 );
panet: ebbene sì, queste due righe qui sopra sono sostanzialmente *tutto*
ciò di cui hai bisogno per utilizzare Exporter in maniera pulita. In
questo modo, stai dicendo che accetti che altri importino le sub 'foo',
'bar' e 'baz', ad esempio con use What::Ever qw( bar );
Ed ora si può dare la stura a ben *due* thread, visto che recentemente
sono state mosse critiche al modulo pragmatico 'base' tali da indurre
Schwern a pensare di rimpiazzarlo con un altro modulo pragmatico,
'parent':
http://www.nntp.perl.org/group/perl.perl5.porters/2007/07/msg127303.html
Ciao!
> Da tradizione, ogni incontro di perlisti che si rispetti deve dare luogo
> a discussioni e dibattiti.
> E siccome l'incontro di ieri si è svolto secondo la migliore tradizione,
> ora bisogna fare in modo che non manchi il dibattito (è un lavoro
> sporco, ma qualcuno doveva farlo).
>
> Potremmo partire dalla presunta deprecazione di "our" a favore di "use
> vars" (io sostengo invece l'esatto contrario).
>
> A tale proposito mi permetto di segnalare che a pag. 861 di "Programming
> Perl" 3rd edition si dice testualmente:
>
> -------------------------------------------------------------------
> use vars qw($frobbed @munge %seen);
>
> This pragma, once used to declare a global variable, is now somewhat
> deprecated in favor of the our modifier. The previous declaration is
> better accomplished using:
>
> our($frobbed, @munge, %seen);
>
> or even:
>
> our $frobbed = "F";
> our @munge = "A" .. $frobbed;
> our %seen = ();
> -------------------------------------------------------------------
>
> Ma questo è niente.
> Visto che nell'attuale documentazione di Perl 5.8.8 si dice chiaro e
> tondo che il pragma "use vars" è /obsolete/ e che /has been superseded
> by our declarations/
> http://search.cpan.org/~nwclark/perl-5.8.8/lib/vars.pm
>
> Sarei interessato quindi a reperire questa famosa deprecazione della
> deprecazione (aldilà delle differenze semantiche tra i due costrutti, di
> cui abbiamo proficuamente discettato, sarei interessato proprio alla
> dichiarazione ufficiale circa la presunta deprecazione di our a favore
> di use vars, che contraddirebbe la documentazione autoritativa di Perl,
> con mio grande disappunto :-(
>
> Direi che come inizio può bastare.
> (Che significa che c'è in serbo di molto peggio ;-)
>
> Ciao,
> Emanuele.
> _______________________________________________
> Roma mailing list
> Roma at pm.org
> http://mail.pm.org/mailman/listinfo/roma
>
More information about the Roma
mailing list