[Roma.pm] - perfunc

Emanuele Zeppieri ema_zep at libero.it
Wed Feb 6 11:41:32 PST 2008


Daniele Ludovici wrote:

> Ormai ci siamo, emazep mi hai stuzzicato troppo e io ora stuzzico te con
> una domanda forse stupida ma che (conoscendoti un po') generera' un
> commento interessante. Scrivilo se e solo quando ne avrai voglia:
> 
> bigint o Math::BigInt, come, dove e in base a cosa scegliere?

Allora, non c'è grande differenza, perché bignum è semplicemente un 
frontend per Math::BigInt che, sfruttando l'overloading delle costanti 
(su cui c'è un bell'articolo su perl.it ;-) trasforma ogni valore 
letterale (numificabile) incontrato nel codice in un oggetto Math::BigInt.
Quindi bigint può tornare comodo se devi lavorare su valori letterali (o 
comunque se parti da quelli, perché le altre variabili coinvolte nelle 
espressioni vengono comunque contaminate e diventano oggetti 
Math::BigInt anch'esse - grazie all'overloading degli operatori).

Insomma bigint rende le cose più trasparenti.

La differenza è sostanzialmente scrivere questo:

use Math::BigInt;
my $str = <numero, anche grandissimo>;
my $x = Math::BigInt->new($str); # $x è ora un oggetto Math::BigInt;

oppure questo:

use bigint;
my $x = <numero, anche grandissimo>; # $x è ora lo stesso un oggetto
                                      # Math::BigInt;

Ecco, nel caso sollevato da Aldo (valori noti solo a runtime) se usi 
direttamente Math::BigInt non sei costretto a ricorrere al trucco di 
sommargli zero, che obiettivamente non è il massimo dell'eleganza.

Ciao,
Emanuele.


More information about the Roma mailing list