[Roma.pm] Tirando le fila... [Was: Re: Alca Seltzer]

Emanuele Zeppieri ema_zep at libero.it
Fri Mar 3 10:57:30 PST 2006


-----Original Message-----
Marco Balestra
Sent: Friday, March 03, 2006 3:01 PM
To: roma at pm.org
Subject: Re: [Roma.pm] Alca Seltzer

> On 01/mar/06, at 17:09, Flavio Poletti wrote:
> 
> > Nessun warning (se non quello che ho inserito io esplicitamente) o  
> > altre
> > incazzature. Panet, a te la palla: dov'è che ti dava errore?!?
> 
> vi leggo ora, scusate... :-P
> 
> 	#!/usr/bin/perl -w
> 	
> 	sub pippo {
> 		my $foo = shift or $!="cazzo" and exit 0;
> 		...
> 	}
> 
> era una cosa cosi`...

OK, allora sembra chiaro: si trattava proprio del warning individuato da
Aldo, che viene scatenato dall'assegnazione $! = "cazzo", che a causa
dell'operatore 'and' viene valutata in contesto booleano.
L'operatore 'and' ha precedenza più alta rispetto ad 'or' e pertanto
l'ordine di valutazione dell'intera espressione è il seguente:

(my $foo = shift) or ($!="cazzo" and exit 0);

e il blocco ($!="cazzo" and exit 0) è semanticamente *equivalente*
proprio al:

if ($! = "cazzo") {exit 0};

citato in perldiag e di cui abbiamo discusso finora.
("Quanti cazzi!" disse la contessa...)

Quindi ci aspetteremmo che senza l'operatore 'and' non ci sia warning, e
infatti ad esempio questo non genera warning:

sub pippo {
    my $foo = shift or $!="cazzo", exit 0;
}

Una volta aggiunto che la mia congettura circa la soppressione del
warning (nel caso delle espressioni) da una versione all'altra di perl
appare adesso ancora meno fondata (l'avevo detto detto che era solo
un'ipotesi ;-) la disamina mi sembra completa.

Se volete aggiungere qualcosa, o se qualcuno (Flavio? ;-) se la sente di
compendiare il tutto, potrebbe uscirci un articolo su come una
goliardica porchettata può trasformarsi in una feconda disamina dei Perl
internals.

Ciao,
Emanuele.



More information about the Roma mailing list