5.5.4. Moduł Niestandardowy
dobrym pomysłem jest stworzenie własnego modułu Perla, który jest specyficzny dla Twojej witryny. Jeśli hostujesz różne witryny lub masz różne aplikacje w swojej witrynie o różnym wyglądzie i odczuciach, możesz utworzyć moduł dla każdej z nich. W tym module możesz umieszczaćsubroutines, których używasz w wielu skryptach CGI.Te podprogramy będą się różnić w zależności od twojej witryny, ale należy obsługiwać błędy.
jeśli wcześniej nie stworzyłeś własnego modułu Perla, nie przejmuj się, jest to dość proste. Przykład 5-3 pokazuje moduł avery minimal.
przykład 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;
jedyną różnicą między modułem Perla a standardowym skryptem Perla jest to, że powinieneś zapisać swój plik z a.pm rozszerzenie, declarethe name of module ’ s package with thepackagefunction (to powinno pasować do nazwy pliku z wyjątkiem bez the.pm extension and substituting:: for/), I make surethat Zwraca wartość true po obliczeniu (powód 1; na dole).
przy określaniu nazwy pakietu, nazwa pliku powinna być przypisana do ścieżki biblioteki w @INC. W naszym przykładzie przechowujemy plik w / usr/lib/perl5/site_perl/5.005/Cgibook/Error.pm./usr/lib/perl5/site_perl / 5.005 jest katalogiem bibliotek. W ten sposób ścieżka do modułu względem librarydirectory to cgibook/Error.pm, więc pakiet to cgibook:: Error.
standardową praktyką jest przechowywanie modułu w$VERSION. Dla wygody używamy również modułu Eksporter do eksportowania podprogramu błędu. To pozwala nam odnosić się do niego w naszych skryptach jako Error zamiast cgibook::Exporter::error. Więcej informacji na temat korzystania zexportera można znaleźć na stronie podręcznika eksportera lub w podstawowym tekście Perla, takim jak programowanie Perla.
masz kilka opcji zapisania tego pliku. Najprostszym rozwiązaniem jest zapisanie go w katalogu site_perl Twoich bibliotek Perla, takich jak/usr/lib/perl5/site_perl/5.005/Cgibook/Error.pm.katalog site_perl zawiera moduły, które są specyficzne dla witryny (tzn. nie są zawarte w standardowej dystrybucji Perla). Ścieżki Twoich bibliotek Perla mogą się różnić; możesz je umieścić w systemie za pomocą następującego polecenia:
$ perl -e 'print map "$_\n", @INC'
prawdopodobnie chcesz utworzyć podkatalog, który jest unikalny dla Twojej organizacji, tak jak zrobiliśmy to z CGIBook, aby trzymać wszystkie tworzone przez Ciebie Moduły Perla.
możesz użyć modułu w następujący sposób:
#!/usr/bin/perl -wTuse strict;use CGI;use CGIBook::Error;my $q = new CGI;unless ( check_something_important( ) ) { error( $q, "Something bad happened." );}
jeśli nie masz uprawnień do zainstalowania modułu w katalogu Perllibrary, a administrator systemu nie może tego zrobić, możesz umieścić moduł w innej lokalizacji, na przykład/usr/local/apache/perl-lib/Cgibook / Error.pm.Następnie musisz pamiętać o umieszczeniu tego katalogu na liście, która wyszukuje Moduły. Najprostszym sposobem, aby to zrobić jestz thelib pragma:
#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...