5.5.4. Modul personalizat
este o idee bună să vă creați propriul modul Perl care este specific site-ului dvs. Dacă găzduiți site-uri diferite, sau au differentapplications în site-ul dvs. cu diferite arata si se simte, maywish pentru a crea un modul pentru fiecare. În cadrul acestui modul, puteți plasasubrutine pe care le găsiți folosind în multe scripturi CGI.Aceste subrutine vor varia în funcție de site-ul dvs., dar ar trebuimanipularea erorilor.
dacă nu v-ați creat propriul modul Perl înainte, nu vă faceți griji, este destul de simplu. Exemplu 5-3 arată modulul avery minimal.
exemplul 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;
singura diferență între un modul Perl și un script Perl standard estecă ar trebui să salvați fișierul cu a.pm extensie, declarethe numele pachetului modulului cu thepackagefunction (acest lucru ar trebui să se potrivească cu numele fișierului, cu excepția fără the.pm extensia și substituirea:: pentru/), și asigurați-văcă returnează o valoare adevărată atunci când este evaluată (motivul pentru the1; în partea de jos).
când se determină numele pachetului, numele fișierului ar trebui să fie raportat la o cale de bibliotecă în @INC. În exemplul nostru, stocăm fișierul la / usr/lib/perl5/site_perl/5.005/Cgibook/Error.pm./usr/lib/perl5/site_perl / 5.005 este un librarydirectory. Astfel, calea către modulul relativ la librarydirectory este CGIBook / Error.pm astfel încât pachetul isCGIBook::eroare.
este o practică standard să stocați versiunea modulului în versiunea$. Din motive de comoditate, folosim și modul exportator pentru a exporta subrutina de eroare. Acest lucru ne permite să ne referim la el în scripturile noastre ca eroareîn loc de cgibook::exportator::eroare. Consultați pagina de manual a exportatorului sau un text Perl primar, cum ar fi programarea Perl, pentru detalii despre utilizarea exportatorului.
aveți câteva opțiuni pentru salvarea acestui fișier. Cea mai simplă soluțieeste să o salvați în directorulsite_perldin bibliotecile Perl, cum ar fi/usr/lib/perl5/site_perl/5.005/cgibook/Error.pm.directorul site_perl include module care sunt specifice site-ului (adică nu sunt incluse în distribuția standard a Perl). Căile bibliotecilor Perl pot diferi; le puteți localiza pe sistemul dvs. cu următoarea comandă:
$ perl -e 'print map "$_\n", @INC'
probabil doriți să creați un subdirector unic pentru organizația dvs., așa cum am făcut cu CGIBook, pentru a păstra toate modulele Perl pe care le creați.
puteți utiliza modulul după cum urmează:
#!/usr/bin/perl -wTuse strict;use CGI;use CGIBook::Error;my $q = new CGI;unless ( check_something_important( ) ) { error( $q, "Something bad happened." );}
dacă nu aveți permisiunea de a instala modulul în directorul Perllibrary, și dacă nu puteți obține administratorul de sistem todo-l, atunci puteți plasa modulul într-o altă locație, forexample,/usr/local/apache/perl-lib/cgibook/Error.pm.Apoi, trebuie să vă amintiți să includeți acest director în lista careperl Caută module. Cel mai simplu mod de a face acest lucru estecu thelib pragma:
#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...