Manejo de Errores (Programación CGI con Perl)

5.5.4. Módulo personalizado

Es una buena idea crear su propio módulo Perl que sea específico para su sitio. Si alojas diferentes sitios, o tienes diferentes aplicaciones dentro de tu sitio con diferentes aspectos y sensaciones, es posible que desees crear un módulo para cada uno. Dentro de este módulo, puede colocar subrutinas que se encuentre usando en muchos scripts CGI.Estas subrutinas variarán dependiendo de su sitio, pero uno debe manejar errores.

Si no ha creado su propio módulo Perl antes, no se preocupe, es bastante simple. El ejemplo 5-3 muestra un módulo mínimo.

Ejemplo 5-3. CGIBook::Error.pm

#!/usr/bin/perl -wTpackage CGIBook::Error;# Export the error subroutineuse Exporter;@ISA = "Exporter";@EXPORT = qw( error );$VERSION = "0.01";use strict;use CGI;use CGI::Carp qw( fatalsToBrowser );BEGIN { sub carp_error { my $error_message = shift; my $q = new CGI; my $discard_this = $q->header( "text/html" ); error( $q, $error_message ); } CGI::Carp::set_message( \&carp_error );}sub error { my( $q, $error_message ) = @_; print $q->header( "text/html" ), $q->start_html( "Error" ), $q->h1( "Error" ), $q->p( "Sorry, the following error has occurred: " ), $q->p( $q->i( $error_message ) ), $q->end_html; exit;}1;

La única diferencia entre un módulo Perl y un script Perl estándar es que debe guardar su archivo con a.pm extensión, declare el nombre del paquete del módulo con la función paquete (esto debe coincidir con el nombre del archivo, excepto sin the.pm extensión y sustitución:: for /), y asegúrese de que devuelve un valor verdadero cuando se evalúa (la razón de the1; en la parte inferior).

Cuando se determina el nombre del paquete, el nombre del archivo debe ser representativo de una ruta de biblioteca en @INC. En nuestro ejemplo, almacenamos el archivo en/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pm./usr/lib/perl5/site_perl / 5.005 es un directorio de biblioteca. Por lo tanto, la ruta al módulo en relación con el directorio de la biblioteca es CGIBook/Error.pm, por lo que el paquete esCGIBook::Error.

Es una práctica estándar almacenar la versión del módulo en$VERSION. Para mayor comodidad, también utilizamos el módulo Exportador para exportar la subrutina de error. Esto nos permite referirnos a it en nuestros scripts como errorinstead de CGIBook::Exporter:: error. Consulte la página manual del exportador o un texto Perl primario, como Perl de programación, para obtener más detalles sobre el uso del transportador.

Tiene un par de opciones para guardar este archivo. La solución más sencilla es guardarla en el directorio site_perl de sus bibliotecas Perl, como/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pm.El directorio site_perl incluye módulos específicos del sitio (es decir, no incluidos en la distribución estándar de Perl). Las rutas de acceso de sus bibliotecas de Perl pueden diferir; puede ubicarlos en su sistema con el siguiente comando:

$ perl -e 'print map "$_\n", @INC'

Probablemente quieras crear un subdirectorio que sea exclusivo de tu organización, como hicimos con CGIBook, para guardar todos los módulos de Perl que crees.

Puede utilizar el módulo de la siguiente manera:

#!/usr/bin/perl -wTuse strict;use CGI;use CGIBook::Error;my $q = new CGI;unless ( check_something_important( ) ) { error( $q, "Something bad happened." );}

Si no tiene permiso para instalar el módulo en su directorio Perllibrary, y si no puede hacer que su administrador del sistema lo haga, puede colocar el módulo en otra ubicación, por ejemplo,/usr/local/apache/perl-lib/CGIBook/Error.pm.Entonces debe recordar incluir este directorio en la lista Queperl busca módulos. La forma más sencilla de hacerlo es con ellib pragma:

#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...

Deja una respuesta

Tu dirección de correo electrónico no será publicada.