Manipulação de erros (programação CGI com Perl)

5.5.4. Módulo personalizado

é uma boa idéia para criar o seu próprio módulo Perl que é específico toyour site. Se você hospedar sites diferentes ou tiver aplicativos diferentes em seu site com aparência e sensação diferentes, você pode querer criar um módulo para cada um. Dentro deste módulo, você pode colocarsubroutinas que você se encontra usando em muitos scripts CGI.Essas sub-rotinas variam dependendo do seu site, mas deve-se manipular erros.

se você não criou seu próprio módulo Perl antes, não trabalhe, é bastante simples. O exemplo 5-3 mostra ummódulo mínimo.

exemplo 5-3. CGIBook::Erro.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;

A única diferença entre um módulo Perl e um padrão de script Perl isthat você deverá salvar seu arquivo com um.pm de extensão, declarethe nome do módulo do pacote com thepackagefunction (deve corresponder ao nome do ficheiro exceto sem.pm de extensão e substituindo:: para /), e fazer surethat ele retorna um valor verdadeiro quando avaliado (a razão para the1; na parte inferior).

Whendetermining o nome do pacote, o nome do arquivo deve berelative a um caminho de biblioteca em @INC. Em ourexample, armazenamos o arquivo em/usr/lib/perl5/site_perl/5.005/CGIBook/Erro.a pm./usr/lib/perl5/site_perl/5.005 é um librarydirectory. Assim, o caminho para o módulo em relação ao librarydirectory é CGIBook/Error.pm para que o pacote isCGIBook::Error.

é prática padrão armazenar a versão do módulo na versão$. Por uma questão de conveniência, também usamoso Módulo exportador para exportaro erro sub-rotina. Isso nos permite referir toit em nossos scripts como errorinstead de CGIBook:: Exporter:: error. Consulte a página de manual do exportador ou um texto Perl primário, comoprogramação Perl, para obter detalhes sobre o uso doexporter.

você tem algumas opções para salvar este arquivo. A solução mais simples é salvá-lo dentro da diretoria_perl de suas bibliotecas Perl, como/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pm.O diretório site_perl inclui módulos específicos do site (ou seja, não incluídos na distribuição padrão do Perl). Os caminhos de suas bibliotecas Perl podem ser diferentes; você canlocate-los em seu sistema com o comando a seguir:

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

Você provavelmente deseja criar uma subpasta que é exclusivo da empresa, como fizemos com CGIBook, para holdall os módulos Perl que você criar.

Você pode usar o módulo da seguinte forma:

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

Se você não tem a permissão para instalar o módulo no seu Perllibrary diretório, e se você não pode obter o seu administrador de sistema todo, então você pode colocar o módulo em outro local, forexample,/usr/local/apache/perl-lib/CGIBook/Erro.pm.Então você deve se lembrar de incluir este diretório na lista queperl procura módulos. A maneira mais simples de fazer isso écom thelib pragma:

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

Deixe uma resposta

O seu endereço de email não será publicado.