Homepage Inspire-world | Forum
CGI/Perl Workshops Subroutinen aus externen Dateien benutzen

 Inhaltsverzeichnis/Workshops Übersichtsseite/Subroutinen aus externen Dateien benutzen
In Teil zwei des Subroutinenworkshops will ich nun zeigen wie man Subroutinen in externen Dateien ablegt und diese dann für mehrere Hauptscripte nutzt.

Warum in externen Dateien? Nun man kann damit bei größeren Scripten schon einige KB an Scriptumfang sparen, und muss nicht Code der in den Scripten überall gebraucht wird in jedes Script wieder und wieder notieren. Ein weiterer Vorteil ergibt sich dann daraus das bei Änderungen nicht jede Datei editiert werden muss, es reicht dann die Datei zu ändern die die gemeinsamen Codes enthält.

Grundlage ist wieder das Scriptbeispiel von Kapitel 1.

1. Das Script vorher, alle Subroutinen in einem Script untergebracht.

#!/usr/bin/perl
# Die obere Zeile nötigenfalls anpassen 
########################################################################

use CGI::Carp qw(fatalsToBrowser);

# Angabe was als "Kommando" genutzt werden soll um Subroutinen aufzurufen
$aktion = $ENV{"QUERY_STRING"};

# Definition welche Subroutine starten bei welchem Query String
if ($aktion eq "") { 
	&hauptseite;
}
if ($aktion eq "seite1") {
	&seite1;
}
if ($aktion eq "seite2") {
	&seite2;
}

########################################################################
# Hauptseite
########################################################################
sub hauptseite {
print "Content-type: text/html\n\n";	
&header;
&links;	

print qq~
<font face="Verdana, Arial" size="2">Subroutine Hauptseite
<br><br>
... weitere Programmanweisungen
</font>
~;

&footer;
}
########################################################################
# Seite 1
########################################################################
sub seite1 {
print "Content-type: text/html\n\n";	
&header;
&links;	

print qq~
<font face="Verdana, Arial" size="2">Subroutine Seite 1
<br><br>
... weitere Programmanweisungen
</font>
~;

&footer;
}
########################################################################
# Seite 2
########################################################################
sub seite2 {
print "Content-type: text/html\n\n";	
&header;
&links;	

print qq~
<font face="Verdana, Arial" size="2">Subroutine Seite 2
<br><br>
... weitere Programmanweisungen
</font>
~;

&footer;
}

########################################################################
# Linkleiste
########################################################################
# Diese Subroutine wird in alle anderen eingebunden

sub links {
print qq~	
<div align="center"><font face="Verdana, Arial" size="2">
<a href=subroutine.pl>Hauptseite</a> | 
<a href=subroutine.pl?seite1>Seite 1</a> | 
<a href=subroutine.pl?seite2>Seite 2</a>
</font></div><br>
~;
}

########################################################################
# Header und Footer Subroutine
########################################################################
# Header für alle Subroutinen
sub header {
print qq~
<html>
<head>
<title>Subroutinen Navigation Beispiel</title>
</head>
<body bgcolor="#F6F6F6" alink="#FF0000" vlink="#800000" text="#000000" link="#000080">
~;
}

########################################################################
# Footer für alle Subroutinen
sub footer {
print qq~
</body>
</html>
~;
}
########################################################################
Hier in dem Beispiel will ich mal davon ausgehen das dies Script oberhalb z.B. 5 mal mit verschiedenen Subroutineninhalten existiert. In jeder Datei sind hier die Unterroutinen sub links, sub header und sub footer untergebracht. Diese drei sollen nun in eine externe Datei ausgelagert werden und damit allen unseren angenommenen 5 Hauptscripten zugänglich gemacht werden.

1. Schritt

Eine neue Datei anlegen und die letzten 3 Subroutinen dort hineinkopieren. Diese Datei als z.B. extern.pl abspeichern.

Der Inhalt der Datei:

########################################################################
# Linkleiste
########################################################################
# Diese Subroutine wird in alle anderen eingebunden

sub links {
print qq~	
<div align="center"><font face="Verdana, Arial" size="2">
<a href=subroutine.pl>Hauptseite</a> | 
<a href=subroutine.pl?seite1>Seite 1</a> | 
<a href=subroutine.pl?seite2>Seite 2</a>
</font></div><br>
~;
}

########################################################################
# Header und Footer Subroutine
########################################################################
# Header für alle Subroutinen
sub header {
print qq~
<html>
<head>
<title>Subroutinen Navigation Beispiel</title>
</head>
<body bgcolor="#F6F6F6" alink="#FF0000" vlink="#800000" text="#000000" link="#000080">
~;
}

########################################################################
# Footer für alle Subroutinen
sub footer {
print qq~
</body>
</html>
~;
}
########################################################################
1;
WICHTIG!
Die 1; muss bei solchen Dateien am Ende stehen, und diese Datei enthält nicht die erste Zeile #!/usr/bin/perl

2. Schritt.
In die Hauptdatei muss nun unterhalb
#!/usr/bin/perl
# Die obere Zeile nötigenfalls anpassen 
########################################################################
Dieser Code eingefügt werden. require "extern.pl";
Require heist soviel wie "benötige" Datei. Dadurch weiss das Hauptscript das es diese Datei sozusagen aufrufen muss und den Code benutzt.

Hier nun beide Dateien komplett fertiggestellt

1. Hauptdatei:
#!/usr/bin/perl
# Die obere Zeile nötigenfalls anpassen 
########################################################################

require "extern.pl";

use CGI::Carp qw(fatalsToBrowser);

# Angabe was als "Kommando" genutzt werden soll um Subroutinen aufzurufen
$aktion = $ENV{"QUERY_STRING"};

# Definition welche Subroutine starten bei welchem Query String
if ($aktion eq "") { 
	&hauptseite;
}
if ($aktion eq "seite1") {
	&seite1;
}
if ($aktion eq "seite2") {
	&seite2;
}

########################################################################
# Hauptseite
########################################################################
sub hauptseite {
print "Content-type: text/html\n\n";	
&header;
&links;	

print qq~
<font face="Verdana, Arial" size="2">Subroutine Hauptseite
<br><br>
... weitere Programmanweisungen
</font>
~;

&footer;
}
########################################################################
# Seite 1
########################################################################
sub seite1 {
print "Content-type: text/html\n\n";	
&header;
&links;	

print qq~
<font face="Verdana, Arial" size="2">Subroutine Seite 1
<br><br>
... weitere Programmanweisungen
</font>
~;

&footer;
}
########################################################################
# Seite 2
########################################################################
sub seite2 {
print "Content-type: text/html\n\n";	
&header;
&links;	

print qq~
<font face="Verdana, Arial" size="2">Subroutine Seite 2
<br><br>
... weitere Programmanweisungen
</font>
~;

&footer;
}
2. Die extern.pl die in das Hauptscript eingebunden wird
########################################################################
# Linkleiste
########################################################################
# Diese Subroutine wird in alle anderen eingebunden

sub links {
print qq~	
<div align="center"><font face="Verdana, Arial" size="2">
<a href=subroutine.pl>Hauptseite</a> | 
<a href=subroutine.pl?seite1>Seite 1</a> | 
<a href=subroutine.pl?seite2>Seite 2</a>
</font></div><br>
~;
}

########################################################################
# Header und Footer Subroutine
########################################################################
# Header für alle Subroutinen
sub header {
print qq~
<html>
<head>
<title>Subroutinen Navigation Beispiel</title>
</head>
<body bgcolor="#F6F6F6" alink="#FF0000" vlink="#800000" text="#000000" link="#000080">
~;
}

########################################################################
# Footer für alle Subroutinen
sub footer {
print qq~
</body>
</html>
~;
}
########################################################################
1;
Ich denke das dies Beispiel die Vorteile deutlich aufzeigt. Denn diese externe Datei kann ja nicht nur für dieses Script benutzt werden sondern durchaus auch für andere Scripte benutzt werden.

» Weiter zu Subroutinen und Parameterübergabe



 Zum Inhaltsverzeichnis/Workshops Übersichtsseite/Subroutinen aus externen Dateien benutzen
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!