5.5.4. Modulo personalizzato
È una buona idea creare il tuo modulo Perl specifico per il tuo sito. Se si ospitano siti diversi, o hanno differentapplications all’interno del tuo sito con diversi sguardi e si sente, si maywish per creare un modulo per ciascuno. All’interno di questo modulo, puoi posizionaresubroutine che ti ritrovi a usare in molti script CGI.Queste subroutine variano a seconda del tuo sito, ma uno shouldhandle errori.
Se non hai creato il tuo modulo Perl prima, non preoccuparti, è abbastanza semplice. Esempio 5-3 mostra avery modulo minimo.
Esempio 5-3. CGIBook::Errore.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;
L’unica differenza tra un modulo Perl e standard di script Perl isthat è necessario salvare il file con un.pm estensione, declarethe nome del modulo, un pacchetto con thepackagefunction (questo deve corrispondere al nome del file, tranne senza.pm estensione e sostituendo:: per /), e fare surethat restituisce un valore true quando viene valutata (il motivo 1; in fondo).
Quando si determina il nome del pacchetto, il nome del file deve essere correlato a un percorso di libreria in @INC. Nel nostro esempio, memorizziamo il file in / usr / lib / perl5 / site_perl / 5.005 / CGIBook / Error. pm./usr/lib/perl5/site_perl / 5.005 è una directory di libreria. Pertanto, il percorso del modulo relativo a librarydirectory è CGIBook / Error. pm quindi il pacchetto isgibook:: Error.
È pratica standard memorizzare la versione del modulo in$VERSION. Per comodità, usiamo anche il modulo Esportatore per esportarela subroutine di errore. Questo ci permette di fare riferimento a esso nei nostri script come errorinvece di CGIBook:: Exporter:: error. Fare riferimento alla pagina man dell’esportatore o a un testo Perl primario, come ad esempio la programmazione di Perl, per i dettagli sull’utilizzo dell’esportatore.
Hai un paio di opzioni per salvare questo file. La soluzione più semplice è salvarla all’interno della directory site_perl delle librerie Perl, come/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pm.La directory site_perl include moduli specifici per il sito (cioè non inclusi nella distribuzione standard di Perl). I percorsi delle librerie Perl potrebbero essere diversi; puoi localizzarli sul tuo sistema con il seguente comando:
$ perl -e 'print map "$_\n", @INC'
Probabilmente vuoi creare una sottodirectory che sia unica per yourorganization, come abbiamo fatto con CGIBook, per contenere i moduli Perl che crei.
È possibile utilizzare il modulo come segue:
#!/usr/bin/perl -wTuse strict;use CGI;use CGIBook::Error;my $q = new CGI;unless ( check_something_important( ) ) { error( $q, "Something bad happened." );}
Se non hai il permesso di installare il modulo in Perllibrary directory, e se non è possibile ottenere il vostro amministratore di sistema todo, quindi si può posizionare il modulo in un’altra posizione, ad esempio,/usr/local/apache/perl-lib/CGIBook/Errore.pm.Quindi devi ricordarti di includere questa directory nell’elenco Cheperl cerca i moduli. Il modo più semplice per farlo ècon ilelib pragma:
#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...