Se desea que el contructor sea lo suficientemente polimorfo para admitir las siguientes formas de llamada:
lhp@nereida:~/Lperl/src$ perl -MNumber::Fraction -de 0 DB<1> x Number::Fraction->new(2,4) 0 Number::Fraction=HASH(0x84666a0) 'den' => 2 'num' => 1 DB<2> x Number::Fraction->new(2) # Un número. El denominador es 1 0 Number::Fraction=HASH(0x8527660) 'den' => 1 'num' => 2 DB<3> x Number::Fraction->new(2,0) # Error. El denominador es cero. Can't make a Number::Fraction with demominator 0 DB<4> $b = Number::Fraction->new # Sin número: es 0/1 DB<5> x $b->new # LLamado por un objeto. Se copia el objeto 0 Number::Fraction=HASH(0x85281f4) 'den' => 1 'num' => 0 DB<6> $b = Number::Fraction->new(2,5) # Dos números: numerador y denominador DB<7> x Number::Fraction->new($b) # Un argumento objeto: se copia 0 Number::Fraction=HASH(0x8528410) 'den' => 5 'num' => 2
Casiano Rodríguez León