webForumDet fria alternativet

Perl - Finns modulen?

Programmering

0 svar · 1 416 visningar · startad av FlashX

Medlem sedan nov. 19991 033 inlägg
Frågan#1

En del skript kräver moduler och med denna så kan man kolla om den är installerad.
Om du själv gjort ett skript som kräver en speciell modul, så kan du modifiera skriptet till en subrutin och länka direkt till den aktuella modulen (om den inte är installerad).
Se exemplet nedan.

Här finns en demo och skriptet kan laddas ner här
Skriptet är inte tänkt att användas i befintligt skick, eftersom det inte direkt fyller någon funktion. (var knepigt att göra en fungerande demo) Vill man ta reda på vilka moduler man har, så är det bättre att lista dessa direkt.
( Källkod )

Om du gör ett skript som kräver en speciell modul, t.ex. LWP::Simple, och någon använder skriptet utan att modulen är installerad, så genereras troligen ett Internal Server Error med en massa huvudbry som följd. För att underlätta något så kan man ge ett bättre meddelande genom att exempelvis länka till aktuell modul om sådan saknas.

Kodexempel på subrutin i befintligt skript:

#!/usr/bin/perl
	
use CGI qw(:standard);
	
# Modulen som behövs för skriptet
$module = "LWP::Simple";
	
# Komplett sökväg till modulen som behövs
$FTPcpan = "ftp.cpan.org/pub/perl/CPAN/modules/by-module/LWP/libwww-perl-5.47.tar.gz";
	
my $action = (param('action')) ? param('action') : 'index';
	
if($action eq 'checkModule') {
	&SearchModule
	
	} else {
	
	Ditt skript kan
	skrivas här mellan
	dessa paranteser
	
}

#################
#   Subrutin
#################
sub SearchModule {

if ($ENV{'SERVER_SOFTWARE'}) {
	
	print "Content-type: text/html\n\n";
	$download = "<a href=\"$FTPcpan\">$FTPcpan</a>";
   }
	
	eval "use $module";
	
	if ($@) {
	
	print qq§ 
	Det verkar inte som <b>$module</b> finns installerad.<br>
	Ladda hem den från $download<br>
	§;
	
    } else {
    
	print qq§
	Modulen <b>$module</b> finns installerad så du kan använda skriptet.
	§;
	}
}

Koden modiferas efter eget behov och modulkontrollen görs med
dittskript.cgi?action=checkModule
vilket då bör framgå i en ReadMe eller i inledningen av skriptet.

[Redigerat av FlashX den 29 jan 2001]

252 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)