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> sHemos 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.123456789Observe 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