5.5.4. Benutzerdefiniertes Modul
Es ist eine gute Idee, ein eigenes Perl-Modul zu erstellen, das für Ihre Site spezifisch ist. Wenn Sie verschiedene Websites hosten oder unterschiedliche Anwendungen auf Ihrer Website mit unterschiedlichem Erscheinungsbild haben, möchten Sie möglicherweise für jede ein Modul erstellen. In diesem Modul können Sie Platzierensubroutinen, die Sie in vielen CGI-Skripten verwenden.Diese Unterprogramme variieren je nach Site, sollten jedoch Fehler behandeln.
Wenn Sie noch kein eigenes Perl-Modul erstellt haben, machen Sie sich keine Sorgen, es ist ganz einfach. Beispiel 5-3 zeigt ein sehr minimales Modul.
Beispiel 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;
Der einzige Unterschied zwischen einem Perl-Modul und einem Standard-Perl-Skript besteht darin, dass Sie Ihre Datei mit speichern sollten a.pm erweiterung, declarethe name des Pakets des Moduls mit thepackagefunction (this should match the file’s name except without the.pm erweiterung und Ersetzen :: für /), und stellen Sie sicher, dass es bei der Auswertung einen wahren Wert zurückgibt (der Grund für die1; unten).
Bei der Bestimmung des Paketnamens sollte der Dateiname einem Bibliothekspfad in @INC entsprechen. In unserem Beispiel speichern wir die Datei unter/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pm./usr/lib/perl5/site_perl/5.005 ist ein Bibliotheksverzeichnis. Daher ist der Pfad zum Modul relativ zur Bibliothekverzeichnis ist CGIBook/Error.pm also ist das Paketcgibook::Error .
Es ist üblich, die Version des Moduls in$VERSION zu speichern. Der Einfachheit halber verwenden wir auch das Exportmodul, um die Fehlerunterroutine zu exportieren. Dies ermöglicht es uns, toit in unseren Skripten als error anstelle von CGIBook::Exporter::error . Weitere Informationen zur Verwendung von Exporter finden Sie auf der Exportor-Handbuchseite oder in einem primären Perl-Text, z. B. Perl programmieren.
Sie haben einige Optionen zum Speichern dieser Datei. Die einfachste Lösung besteht darin, sie im Verzeichnis site_perl Ihrer Perl-Bibliotheken zu speichern, z. B./usr/lib/perl5/site_perl/5.005/CGIBook/Error.pm.Das Verzeichnis site_perl enthält Module, die standortspezifisch sind (dh nicht in der Standardverteilung von Perl enthalten sind). Die Pfade Ihrer Perl-Bibliotheken können abweichen; sie canlocate sie auf Ihrem System mit dem folgenden Befehl:
$ perl -e 'print map "$_\n", @INC'
Sie möchten wahrscheinlich ein Unterverzeichnis erstellen, das für Ihre Organisation eindeutig ist, wie wir es mit CGIBook getan haben, um die von Ihnen erstellten Perl-Module zu speichern.
Sie können das Modul wie folgt verwenden:
#!/usr/bin/perl -wTuse strict;use CGI;use CGIBook::Error;my $q = new CGI;unless ( check_something_important( ) ) { error( $q, "Something bad happened." );}
Wenn Sie nicht über die Berechtigung verfügen, das Modul in Ihrem Perllibrary-Verzeichnis zu installieren, und wenn Sie Ihren Systemadministrator nicht dazu bringen können, dies zu tun, können Sie das Modul an einem anderen Speicherort ablegen, z. B./usr/local/apache/perl-lib/CGIBook/Error.pm.Dann müssen Sie daran denken, dieses Verzeichnis in die Liste aufzunehmen, in der PERL nach Modulen sucht. Der einfachste Weg, dies zu tun, istmit thelib pragma:
#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...