[Roma.pm] Alca Seltzer

Emanuele Zeppieri ema_zep at libero.it
Thu Mar 2 18:31:47 PST 2006


-----Original Message-----
Aldo Calpini
Sent: Thursday, March 02, 2006 7:34 PM
To: roma at pm.org
Subject: Re: [Roma.pm] Alca Seltzer
  
> Emanuele Zeppieri ha scritto:
> > La sottile differenza tra le due situazioni mi farebbe pensare al
> > classico warning "troppo intelligente" che a un certo punto 
> > si è deciso di rimuovere, almeno in un caso... 

> nope. non è "troppo" intelligente, lo è giustamente. 
> l'assegnazione ha come side-effect quello di restituire il valore
> assegnando, per cui ha perfettamente senso testare (my $foo = shift).
> se shift restituisce undef o falso, il blocco if viene saltato,
> mentre se shift restituisce un valore vero, il blocco if viene
> eseguito con tanto di $foo valorizzato.

Guarda che io dicevo proprio questo!
Con "troppo intelligente" (o meglio troppo /pervasivo/) non mi riferivo
mica all'attuale semantica del warning, ma al fatto (ipotetico) che in
origine il warning poteva essere generato da qualsiasi:

	if ($foo = <expr>)

dove <expr> era una qualsiasi espressione Perl.
Poi in seguito, rendendosi conto che costrutti in cui <expr> *non* era
una costante erano spesso deliberati, il warning è stato rimosso in
questi casi, lasciandolo attivo unicamente nel caso in cui <expr> è una
costante (cosa *comunque* sensata, vedi oltre).
(Mi rendo conto che come ricostruzione non è il massimo della
verosimiglianza, ma è l'unica spiegazione che mi è venuta in mente
compatibile con quanto riferito da Panet.)

> non ha giustamente alcun senso testare (my $foo = 123), e il 
> warning mi sembra appropriato.

No, direi che non è esatto affermare che "non ha alcun senso testare (my
$foo = 123)".
Mi vengono in mente almeno un paio di diverse situazioni in cui tale
test ha perfettamente senso:

1. $foo è una variabile "tied";
2. l'assegnazione avviene in un contesto in cui è attivo l'overloading
delle costanti (in Perl si può fare anche l'overloading delle costanti!
:-)
http://perldoc.perl.org/overload.html#Overloading-constants

In entrambi questi casi la semplice assegnazione di una costante dà
luogo all'esecuzione di codice arbitrariamente complesso che, come
risultato dell'assegnazione, potrebbe restituire qualsiasi valore
(diverso dalla costante assegnata) che quindi può essere sottoposto a
test, con piena legittimità anche sul piano logico/concettuale oltre che
su quello puramente sintattico.

Detto questo concordo anch'io sul fatto che il warning è ragionevole e
condivisibile: ad un warning non si può chiedere di avere *sempre*
ragione (altrimenti dovrebbe essere un errore), è sufficiente che abbia
ragione nella maggior parte casi.

> il che comunque non sgarbuglia la matassa. panet dovrà 
> rispondere di tutto ciò al prossimo meeting!

Sperabilmente anche prima, visto che la suspense continua a salire,
dando luogo a sproloqui come questo sugli esoterismi del Perl ;-)

Ciao,
Emanuele.



More information about the Roma mailing list