5.5.4. Brugerdefineret modul
det er en god ide at oprette dit eget Perl-modul, der er specifikt til dit sted. Hvis du er vært for forskellige sider, eller har forskellige applikationer på din side med forskellige udseende og følelser, du vil muligvis oprette et modul til hver. Inden for dette modul kan du placeresubroutiner, som du finder dig selv ved hjælp af på tværs af mange CGI-scripts.Disse subrutiner vil variere afhængigt af din hjemmeside, men man skalhåndtere fejl.
hvis du ikke har oprettet dit eget Perl-modul før, gør det ikkebekymre dig, det er ret simpelt. 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 forskel mellem et Perl-modul og et standard Perl-script erat du skal gemme din fil med a.pm udvidelse, erklærenavnet på modulets pakke medemballagefunktion (dette skal matche filens navn undtagen uden the.pm udvidelse og erstatning:: for/), og sørg for, at den returnerer en sand værdi, når den evalueres (årsagen til1; nederst).
nårBestemmelse af pakkenavnet skal filens navn værei forhold til en bibliotekssti i @INC. I vores eksempel gemmer vi filen på / usr / lib/perl5/site_perl/5.005/CGIBook/Error.pm./usr/lib/perl5/site_perl / 5.005 er en librarydirectory. Stien til modulet i forhold til librarydirectory er således CGIBook/Error.pm, så pakken isCGIBook::Error.
det er standard praksis at lagreversion af modulet i$VERSION. For nemheds skyld bruger vi Ogsåeksportørmodulet til eksportfejlen underrutine. Dette giver os mulighed for at henvise til det i vores scripts som fejli stedet for CGIBook::eksportør::fejl. Der henvises til eksportørens manside eller en primær Perl-tekst, som f.eks. programmeringsperl, for nærmere oplysninger om brug af Eksporter.
du har et par muligheder for at gemme denne fil. Den enkleste løsning er at gemme den inden for site_perl directoryaf dine Perl biblioteker, såsom/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pm.site_perl mappen indeholder moduler, der er stedspecifikke (dvs.ikke inkluderet i Perls standarddistribution). Stierne i dine Perl-biblioteker kan variere; du kanplacere dem på dit system med følgende kommando:
$ perl -e 'print map "$_\n", @INC'
du vil sandsynligvis oprette en undermappe, der er unik for dinorganisation, som vi gjorde med CGIBook, for at holdealle de Perl-moduler, du opretter.
du kan bruge modulet 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 tilladelse til at installere modulet i dit perllibrary-bibliotek, og hvis du ikke kan få din systemadministrator til at gøre det, kan du placere modulet et andet sted, for eksempel/usr/local/apache/perl-lib/CGIBook/Error.pm.Så skal du huske at medtage denne mappe på listen somperl søger efter moduler. Den enkleste måde at gøre dette på ermed thelib pragma:
#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...