[Roma.pm] Alca Seltzer

Flavio Poletti flavio at polettix.it
Fri Mar 3 03:23:26 PST 2006


... al che mi chiedo: dov'era *questa gente* quando si stava facendo il
contest? Con tre email usciva fuori un articolo sicuramente vincente!

Ciao e grazie,

   Flavio.


[Emanuele Zeppieri ha osato scrivere]
>
> Ho dimenticato di dire che quest'affermazione non è corretta (devo
> precisarlo, altrimenti non si capirebbe come un'assegnazione ad una
> variabile tied possa dare come risultato un valore diverso dal valore
> assegnando, come dicevo nel mio precedente messaggio.)
>
> In Perl (come del resto nella maggior parte dei linguaggi imperativi)
> l'assegnazione *non* restituisce il valore assegnando, bensì il
> contenuto della variabile *dopo* l'assegnazione (per essere più
> rigorosi: il valore ritornato dalla valutazione dello lvalue dopo
> l'assegnazione).
>
> Ovviamente in quasi tutti i casi non c'è differenza ma, nel caso delle
> variabili tied, la differenza diventa *molto* rilevante.
> Infatti come è noto il valore ritornato da una variabile tied, è il
> valore ritornato dal metodo FETCH della classe a cui tale variabile è
> stata legata mediante tie.
> Quindi il risultato dell'assegnazione ($foo = 123), nel caso in cui $foo
> sia uno scalare tied, *non* è 123, ma il valore restituito dal metodo
> FETCH che, in generale, è del tutto arbitrario.
> Pertanto il metodo FETCH potrebbe ad esempio restituire il valore zero,
> e quindi il test
>
> if ($foo = 123)
>
> potrebbe tranquillamente fallire!
> Accludo anche uno script dimostrativo.
>
> ... Il silenzio di Panet continua a fare danni ;-)
>
> Ciao,
> Emanuele.
>
> =cut
>
> use strict;
>
> package Tier;
> sub TIESCALAR {bless \my $self, shift};
> sub STORE { ${$_[0]} = $_[1] };
> sub FETCH { 0 };
>
> package main;
> my $foo;
> tie $foo, 'Tier';
> if ($foo = 123) {
>     print 'OK!'
> } else {
>     print 'NO!'
> };
> # Stampa NO!
> # (E se si mette use warnings continua a dare il warning.)
> __END__
>
> _______________________________________________
> Roma mailing list
> Roma at pm.org
> http://mail.pm.org/mailman/listinfo/roma
>



More information about the Roma mailing list