Breve Introducción al Manejo de Excepciones

Si se desea controlar las interrupciones que puedan ocurrir durante la entrada podemos establecer un código que maneje la señal INT, la cual es producida cuando se teclea CTRL-C. El manejador debe ser una subrutina o una referencia a una subrutina. He aqui un ejemplo:

lhp@europa:~/projects/perl/src/perltesting$ cat -n io.pl
     1  #!/usr/bin/perl -w
     2  use strict;
     3
     4  $SIG{INT} = sub {
     5    print "¡Que forma tan violenta de terminar!\n";
     6    exit(1);
     7  };
     8
     9  print "Tu nombre: ";
    10  my $x = <>;
    11  chomp($x);
    12  print "Hola $x\n";

Aun cuando es adelantar mucho, la expresión $SIG{INT} denota la entrada INT del hash/diccionario %SIG. Un hash puede verse como una tabla con dos columnas, donde la de la izquierda almacena las claves y la de la derecha los valores. Una variable hash se prefija con el símbolo %.

%a = ( 'x', 5, 'y', 3); # llena 2 elementos del hash 

Los elementos individuales de un hash se acceden prefijando el nombre del hash de un $ seguido de la clave entre llaves:

%a = ( 'x', 5, 'y', 3); 
$a{x} = 7;
print  $a{x}; #  imprime: 7
print $a{'x'};  # imprime: 7
print $a{'y'};  # imprime: 3

En el interior de las llaves, si la clave es un identificador (incluyendo el guión bajo) se pueden omitir las comillas:

La palabra sub seguida de un código retorna un escalar que es una referencia a una subrutina cuya implementación viene dada por dicho código. Vea el siguiente ejemplo con el depurador:

casiano@tonga:/tmp$ perl -wde 0
main::(-e:1):   0
  DB<1> $x = sub { print "Hola mundo\n" }
  DB<2> $x->()
Hola mundo

Si ejecutamos el programa de ejemplo anterior obtenemos una salida como:

lhp@europa:~/projects/perl/src/perltesting$ ./io.pl
Tu nombre: Juan
Hola Juan
Si presionamos CTRL-C se produce la salida:
lhp@europa:~/projects/perl/src/perltesting$ ./io.pl
Tu nombre: ¡Que forma tan violenta de terminar!

Casiano Rodríguez León
2009-10-04