Manejar warnings y excepciones en Perl

Cuando el código de nuestro script Perl genera warnings o excepciones ambos se envían al STDERR (una de los flujos estándares de datos). Adicionalmente podemos “atraparlos” (catch) y “manejarlos” (handle) con ciertos bloques de código.

Los warnings se pueden atrapar de la siguiente manera:

local $SIG{__WARN__} = sub {
  my $message = shift;
  #CODIGO DE TRATAMIENTO DE WARNING
};

Ejemplo:

sub db_connect {
  ...
  local $SIG{__WARN__} = sub {
    my $message = shift;
    return 'DB_CONN_ERROR';
  };
  ...
  my $dbh = DBI->connect("dbi:mysql:test:localhost:3306", "test", "secure",{PrintError => 1});

Así, cuando falle la conexión a la base de datos la función devolverá el código de error correspondiente para que la aplicación responda a esa situación.

Las excepciones se pueden atrapar de manera análoga a los warnings:

local $SIG{__DIE__} = sub {
  my $message = shift;
  #CODIGO DE TRATAMIENTO DE EXCEPCION
};

En este caso, también existe una forma alternativa:

eval {
  #CODIGO QUE PUEDE GENERAR EXCEPCION
};
if( $@ ){
  #CODIGO DE TRATAMIENTO DE EXCEPCION
}

Ejemplo:

eval {
  mkpath($ubicacion);
}
if( $@ ){
  $path = $ubicacion;
}

Así, cuando falle la la creación del path indicado en la variable $ubicacion porque el mismo ya existe, se asigna a la variable $path.

Tagged with: , , ,
Publicado en Aplicaciones