5.5.4. Egyéni modul
ez egy jó ötlet, hogy saját Perl modul, amely adott toyour oldalon. Ha különböző webhelyeket üzemeltet, vagy eltérő megjelenésű és érzésű alkalmazásai vannak a webhelyén, akkor mindegyikhez létrehozhat egy modult. Ezen a modulon belül elhelyezhetiszubrutinok, amelyeket sok CGI szkripten keresztül használ.Ezek a szubrutinok az Ön webhelyétől függően változnak, de meg kellkezelje a hibákat.
ha még nem hoztál létre saját Perl modult, ne aggódj, ez nagyon egyszerű. Példa 5-3 mutatja avery minimális modul.
5-3.példa. 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;
az egyetlen különbség a Perl modul és a szabványos perl script között az, hogy a fájlt a következővel kell menteni a.pm kiterjesztés, deklarea modul csomagjának neve thepackagefunkcióval (ennek meg kell egyeznie a fájl nevével, kivéve the.pm kiterjesztés és helyettesítés:: for/), és győződjön meg róla, hogy valódi értéket ad vissza az értékeléskor (az 1 oka; alul).
a Csomagnév meghatározásakor a fájl nevének a @INC könyvtár elérési útjához kell kapcsolódnia. Például a/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pm./usr/lib/perl5/site_perl/5.005 könyvtárban tároljuk a fájlt. Így a modul elérési útja a librarydirectory-hoz viszonyítva a CGIBook/Error.pm, így a csomag isCGIBook::Error.
általános gyakorlat, hogy a modul verzióját$verzióban tárolja. A kényelem kedvéért az exportőr modult is használjuka hiba szubrutin exportálásához. Ez lehetővé teszi számunkra, hogy a szkriptjeinkben errorinstead CGIBook::Exporter::error. Lásd az exportőr manpage vagy az elsődleges Perl szöveget, mint például a programozása Perl, a részleteket usingExporter.
van néhány lehetőség a fájl mentésére. A legegyszerűbb megoldás az, ha a Perl könyvtárak site_perl könyvtárába menti, például/usr/lib/perl5/site_perl/5.005/cgibook / Error.pm.a site_perl könyvtár olyan modulokat tartalmaz, amelyek helyspecifikusak (azaz nem szerepelnek a Perl szabványában) disztribúció). A Perl könyvtárak elérési útjai eltérhetnek; a következő paranccsal helyezheti el őket a rendszeren:
$ perl -e 'print map "$_\n", @INC'
valószínűleg olyan alkönyvtárat szeretne létrehozni, amely egyedülálló a szervezet számára, mint a CGIBook esetében, hogy megtartsa az összes létrehozott Perl modult.
a modul a következőképpen használható:
#!/usr/bin/perl -wTuse strict;use CGI;use CGIBook::Error;my $q = new CGI;unless ( check_something_important( ) ) { error( $q, "Something bad happened." );}
ha nincs engedélyed a modul telepítéséhez a Perllibrary könyvtárba, és ha nem tudod rávenni a rendszergazdát, hogy tegye meg, akkor elhelyezheted a modult egy másik helyen, például: / usr/local/apache/perl-lib/CGIBook / Error.pm.Ezután ne felejtse el felvenni ezt a könyvtárat a listábaa perl modulokat keres. Ennek legegyszerűbb módjaelib pragmával:
#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...