5.5.4. Tilpasset Modul
det er en god ide Å lage Din Egen Perl-modul som er spesifikk for ditt nettsted. Hvis du er vert for forskjellige nettsteder, eller har forskjellige applikasjoner på nettstedet ditt med forskjellig utseende og følelse, kan du opprette en modul for hver. Innenfor denne modulen kan du placesubrutines som du finner deg selv å bruke på tvers AV MANGE CGI-skript.Disse subrutinene vil variere avhengig av nettstedet ditt, men man børhåndtere feil.
hvis du ikke har opprettet Din Egen Perl-modul før, ikke bekymre deg, det er ganske enkelt. Eksempel 5-3 viser avery minimal modul.
Eksempel 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;
den eneste forskjellen mellom En Perl-modul og et standard Perl-skript erat du bør lagre filen med a.pm extension, declarethe navnet på modulen pakke med thepackagefunction (dette bør samsvare med filnavnet unntatt uten the.pm forlengelse og erstatning:: for/), og sørg for at den returnerer en sann verdi når den evalueres(årsaken til 1; nederst).
når Du Bestemmer pakkenavnet, bør filens navn værei forhold til en biblioteksbane i @ INC. I ourexample lagrer vi filen på / usr / lib / perl5/site_perl/5.005/cgibook/Error.pm./usr/lib/perl5/site_perl / 5.005 er en librarydirectory. Dermed er banen til modulen i forhold til librarydirectory CGIBook / Error.pm så pakken isCGIBook::Error.
det er standard praksis å lagre theversion av modulen i$VERSJON. For enkelhets skyld bruker vi ogsåeksportørmodulen til exportthe error subrutine. Dette tillater oss å referere toit i våre skript som errorinstead Of CGIBook:: Exporter:: error. Se Eksportørens manpage eller en primær perl-tekst, for eksempel programmering Perl, for detaljer om bruk av exporter.
du har et par alternativer for å lagre denne filen. Den enkleste løsningen er å lagre Den i site_perl-katalogenav Perl-bibliotekene dine, for eksempel/usr/lib/perl5/site_perl/5.005/cgibook/Error.pm.site_perl-katalogen inneholder moduler som er stedsspesifikke (dvs.ikke inkludert i Perls standarddistribusjon). Banene Til Perl-bibliotekene dine kan variere; du canlocate dem på systemet ditt med følgende kommando:
$ perl -e 'print map "$_\n", @INC'
du vil sannsynligvis lage en underkatalog som er unik for yourorganisation, som vi gjorde Med CGIBook, for å holde Alle Perl-modulene du lager.
du kan bruke modulen som følger:
#!/usr/bin/perl -wTuse strict;use CGI;use CGIBook::Error;my $q = new CGI;unless ( check_something_important( ) ) { error( $q, "Something bad happened." );}
Hvis du ikke har tillatelse til å installere modulen i Perllibrary katalogen, og hvis du ikke kan få systemadministratoren todo det, så kan du plassere modulen på et annet sted, forexample, / usr / local / apache/perl-lib / CGIBook / Error.pm.Da må du huske å inkludere denne katalogen i listen somperl søker etter moduler. Den enkleste måten å gjøre dette på ermedb pragma:
#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...