Por ejemplo, si ejecutamos con el depurador el programa:
$ cat -n ./bigfloat2.pl
1 #!/usr/bin/perl -d
2 use strict;
3 use Math::BigFloat;
4
5 my $a = Math::BigFloat->new('123_456_789_123_456_789');
6 my $y = $a->copy()/1_000_000_000;
7
8 print "a+y = ",$a+$y,"\n";
observaremos como la subrutina asociada con el + es llamada:
$ ./bigfloat2.pl
main::(./bigfloat2.pl:5): my $a = Math::BigFloat->new('123_456_789_123_456_789');
DB<1> n
main::(./bigfloat2.pl:6): my $y = $a->copy()/1_000_000_000;
DB<1>
main::(./bigfloat2.pl:8): print "a+y = ",$a+$y,"\n";
DB<1> s
Hemos pulsado s para entrar en la subrutina ...
Math::BigInt::CODE(0x82f9acc)(/usr/share/perl5/Math/BigInt.pm:50):
50: '+' => sub { $_[0]->copy()->badd($_[1]); },
DB<1> p "@_"
123456789123456789 123456789.123456789
Observe los dos argumentos: los dos números grandes. Seguimos ...
DB<2> n
Math::BigInt::CODE(0x830c9f0)(/usr/share/perl5/Math/BigInt.pm:110):
110: '""' => sub { $_[0]->bstr(); },
esta es la conversión necesaria del resultado a una cadena para ser impresa,
continuamos ...
DB<2> a+y = 123456789246913578.123456789 Debugged program terminated. Use q to quit or R to restart, use O inhibit_exit to avoid stopping after program termination, h q, h R or h O to get additional info.
Casiano Rodríguez León
