Una Sesión con el Depurador

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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19