[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