SCRIPTSPRACHE PERL

Werbung
SCRIPTSPRACHE PERL
· Practical Extraction and Report Language
p:practical
(einfache Programmierung)
e:extraction (zieht www- oder System- Datenbank - Information)
r:report
(Ausgabe von gefundenen Informationen)
l:language
(Programmiersprache)
TETRIS.pl
Quelle: O´Reilley´s CD Bookshelf
- Entwicklung 1987 von Larry Wall, über 13 Jahre bewährt
- Einflüsse: sed, grep, awk, Shell-Skripts und C
- generell frei im www verfügbar, Installation , aktuelle version 5.x , Version 6 ist in Entwicklung
(evtl. mit deutlichen Änderungen)
- ursprünglich als UNIX-Tool, heute auf jedes System übertragbar
- per CGI-Programmierung können Formulare und interaktive Eingaben/Abfragen auf den Webserver übertragen
werden, sodass Programme bzw. Skripts mit den Daten dort laufen können
- Perl ist plattformunabhängig, portabel, besonders gut bei Datenbankkommunikation
ANWENDUNG: allround-Skriptsprache für Systemadministration, Webadministration, Programmentwürfe
PROGRAMMIERUNG: strukturiert und modular, ~objektorientiert, fortgeschrittene Datenstrukturen möglich
DATENTYPEN bezgl. DATENBANKEN:
- identifier ($),
- arrays (@),
- hashes (%)
- etc.
$aref
= \@array;
$anon_array
= [1, 3, 5, 7, 9];
$anon_copy
= [ @array ];
@$implicit_creation = (2, 4, 6, 8,
10);
%age = ( "Nat", 24,
"Jules", 25,
"Josh", 17 );
%food_color = (
Apple => "red",
Banana => "yellow",
Lemon => "yellow",
Carrot => "orange"
);
Vorteile von Perl gegenueber PHP:
1. Länger im Geschäft, daher massenweise Module, rel. guter Support, lange getestet, verbreitet.
2. Nicht so sehr auf Web festgelegt. Die Ursprünge liegen in der Textaufbereitung.
3. Andocken an zahlreiche C-Bibliotheken möglich.
Das client-server-application-model via CGI
Quelle: Learning Pearl ( O´Reilly-Verlag )
„HELLO WORLD“ als Einsteiger-CGI-Programm
#!/usr/bin/perl -w
# howdy--the easiest of CGI programs
print <<END_of_Multiline_Text;
Content-type: text/html
<HTML>
<HEAD>
<TITLE>Hello World</TITLE>
</HEAD>
<BODY>
<H1>Greetings, Terrans!</H1>
</BODY>
</HTML>
END_of_Multiline_Text
Perl- „Hello_World“:
#!/usr/bin/perl -w
print ("Hello, world!\n");
Im CGI-Verzeichnis wird ein CGI.Programm abgespeichert, wie bspw.
http://www.SOMEWHERE.org /cgi-bin/howdy
HTML- Formular eines Perl- guestbooks
<HTML><HEAD><TITLE>Guestbook</TITLE></HEAD>
<BODY>
<H1>Fill in my guestbook!</H1>
<FORM METHOD="GET" ACTION="/cgi-bin/guestbook.pl">
<PRE>
First Name: <INPUT TYPE="TEXT" NAME="firstname">
Last Name: <INPUT TYPE="TEXT" NAME="lastname">
<INPUT TYPE="SUBMIT">
</FORM>
<INPUT TYPE="RESET">
DATENBANK MIT PERL UND SQL
1) SQL Datenbank installieren
2) DBI-Module für Perl laden
(www.perl.com , www.symbolstone.org/technology/perl/DBI)
( für WinNT: activestate.com )
gebräuchliche Subroutine
##########################################
## Create a connection to the database. ##
##########################################
1: sub Create_DB_Connection
{
2: use DBI;
3: $DSN = "DBI:mysql:$db_name";
4: $user = "username";
5: $pw = "secret";
6: $dbh = DBI->connect($DSN,$user,$pw)
7: || die "Cannot connect: $DBI::errstr\n" unless $dbh;
8: return;
9:
}
# End of Create_DB_Connection subroutine.
##########################################
1: „beginne Subroutine“
2: „verwende DBI-Modul“
3: „Variable heißt DSN - Data Source Name“
„DBI:mysql - Treiber soll verwendet werden“
„Anschluß an Datenbank db_name“
4: „user/login-name“
5: „passwort-request“
6: „nehme Verbindung mit dieser Datenbank auf“
„dbh = DataBaseHandle“ als fester Ausdruck“
7: „bei Fehlermeldung abbrechen“
8: „zurück zum eigentlichen Aufruf“
9: „Ende der Subroutine“
##########################################
## Executes the SQL command and then ##
## returns to the calling area of the ##
## program.
##
##########################################
1: sub Do_SQL{
2: eval{
3:
$sth = $dbh->prepare($SQL);
4: }; # End of eval
# Check for errors.
5: if($@){
6:
$dbh->disconnect;
7:
print "Content-type: text/html\n\n";
8:
print "An ERROR occurred! $@\n";
9:
exit;
10: } else {
11: $sth->execute;
12: } # End of if..else
13: return ($sth);
14:} # End of Do_SQL subroutine
##############################################
###################
## SQL- Ausführung##
1: „beginne Subroutine“
2: „Vergleichsbedingung eval prüft auf Fehler“
„bei Fehlermeldung wird ein Wert in $@ übergeben“
3: „checkt DBI auf Fehlerfreiheit- wenn Fehler auftritt, wird er in $@ übergeben“
4: „beende Evaluierungsblock“
5ff: „wenn Fehler-Wert in ($@), dann melde ihn und trenne die Verbindung“
„wenn alles okay, dann zum Else-Block“
7: „HTML-header ausgeben zur Kontrolle“
8: „Fehlermeldung ausgeben mit dem dem Wert in $@ entsprechenden perlgenerierten
Fehlertext“
10: „wenn fehlerfrei,“
11: „führe Standart-Handle aus (welches SQL beinhaltet)“
13: „mit dem $sth-handle zurück zum Programm“
14: „}“ - Abschluß
Beispiel einer Perl-SQL-Datenbank-Implementierung ( Name, e-mail, Tel ) in HTML eingebettet
- das search-CGI-Programm gibt angeforderte Daten heraus 1: #!/usr/bin/perl
2: ###########################
3: ## search.cgi
##
4: ## This program grabs ##
5: ## info from a phone ##
6: ## database and prints ##
7: ## if for the user. ##
8: ###########################
9: use CGI qw/:standard/;
10: require "common.sub"; # Contains the "snippets" that we discussed.
11: ## Get the data from the web page.
12: $search_for = param(search_for);
13: $field = param(search_field);
14: $sort
= param(sort_on);
15: ## Print the standard HTML header.
16: print header;
17: ## Do our stuff!
18: &Create_DB_Connection;
19: &get_info;
20: &print_results;
21: # Disconnect from the database (DON'T FORGET THIS!)
22: $dbh->disconnect;
23: ################ BEGIN GET INFO SUBROUTINE
24: sub get_info{
25: ## This is our SQL statement that we want to execute.
26: $SQL="SELECT * FROM phones WHERE $field like '%$search_for%' ORDER BY $sort";
27: &Do_SQL;
28: }
29: ################ END GET INFO SUBROUTINE
30: ################ BEGIN PRINT RESULTS SUBROUTINE
31: sub print_results{
32: print <<HTML;
33: <HTML><HEAD><TITLE>Search Thing</TITLE></HEAD>
34: <BODY BGCOLOR="#FFFFFF">
35: <CENTER><FONT SIZE=6>Search Results</FONT></CENTER>
36: <HR WIDTH=80%>
37: <P>
38: <CENTER><TABLE BORDER=1 CELLSPACING=0>
39:
<TR>
40:
<TD BGCOLOR="#c0c0c0" COLSPAN=6>
41:
<CENTER><B>MySQL/Perl Integration Example</B></CENTER>
42:
</TD>
43:
</TR>
44: <TR>
45: <TD BGCOLOR="c0c0c0">
46:
<FONT SIZE=2 FACE=ARIAL><CENTER><B>Name</B></CENTER></FONT></TD>
47: <TD BGCOLOR="c0c0c0">
48:
<FONT SIZE=2 FACE=ARIAL><CENTER><B>Phone</B></CENTER></FONT></TD>
49: <TD BGCOLOR="c0c0c0">
50:
<FONT SIZE=2 FACE=ARIAL><CENTER><B>E-Mail</B></CENTER></FONT></TD>
51: <TD BGCOLOR="c0c0c0">
52:
<FONT SIZE=2 FACE=ARIAL><CENTER><B>Notes</B></CENTER></FONT></TD>
53: <TD BGCOLOR="c0c0c0">
54:
<FONT SIZE=2 FACE=ARIAL><CENTER><B>Modify</B></CENTER></FONT></TD>
55: <TD BGCOLOR="c0c0c0">
56:
<FONT SIZE=2 FACE=ARIAL><CENTER><B>Delete</B></CENTER></FONT></TD>
57: </TR>
58: HTML
59:
60:
61:
62:
63:
64:
65:
66:
67:
## fetchrow_hashref grabs the data returned from the SQL call
## and stores them in a hash with the keys being the names
## of the database fields. This is how you access the data.
while ($pointer = $sth->fetchrow_hashref){
$f_name = $pointer->{'first_name'};
$l_name = $pointer->{'last_name'};
$phone = $pointer->{'phone'};
$email = $pointer->{'email'};
$notes = $pointer->{'notes'};
68: ## Make our HTML look better if no data.
69: $f_name = " " if($f_name eq "");
70: $l_name = " " if($l_name eq "");
71: $phone = " " if($phone eq "");
72: $email = " " if($email eq "");
73: $notes = " " if($notes eq "");
74: print <<HTML;
75: <TR BGCOLOR="e0e0e0">
76: <TD><FONT SIZE=2 FACE=ARIAL>$f_name $l_name</FONT></TD>
77: <TD><FONT SIZE=2 FACE=ARIAL>$phone</FONT></TD>
78: <TD><FONT SIZE=2 FACE=ARIAL><A HREF="mailto:$email">$email</A></FONT></TD>
79: <TD><FONT SIZE=2 FACE=ARIAL>$notes</FONT></TD>
80: <TD><FONT SIZE=1 FACE=ARIAL>
81: [<A HREF="/cgi-bin/sql/modify1.cgi?$email">Modify</A>]
82: </FONT><TD>
83: <TD><FONT SIZE=1 FACE=ARIAL>
84: [<A HREF="/cgi-bin/sql/delete.cgi?$email">Delete</A>]
85: </FONT><TD>
86: </TR>
87: HTML
88: } # End of while.
89: print<<HTML;
90: </TABLE></CENTER>
91: <P>
92: <HR WIDTH=80%>
93: <P>
94: <CENTER>
95: <FONT SIZE=4>
96:
<A HREF="/sql/index.html">Main Page</A>
97: </FONT>
98: </CENTER>
99: </BODY></HTML>
100: HTML
101: } # End of print_results subroutine
102: ################ END PRINT RESULTS SUBROUTINE
add.cgi fügt Daten in die Datenbank ein
1: #!/usr/bin/perl
2: ### add.cgi
3: use CGI qw/:standard/;
4: require "common.sub";
5: $f_name = &filter(param(first_name));
6: $l_name = &filter(param(last_name));
7: $phone = &filter(param(phone));
8: $email = &filter(param(email));
9: $notes = &filter(param(notes));
10: print header;
11: &Create_DB_Connection;
12: &write_data;
13: &print_output;
14: # Disconnect from the database
15: $dbh->disconnect;
16: ################ BEGIN WRITE DATA SUBROUTINE
17: sub write_data{
18: $SQL = "INSERT INTO phones (first_name,last_name,phone,email,notes)
19:
VALUES ('$f_name','$l_name','$phone','$email','$notes')";
20: &Do_SQL;
21: } # End of write_data
22: ################ END WRITE DATA SUBROUTINE
23: ################ BEGIN PRINT OUTPUT SUBROUTINE
24: sub print_output{
25: print<<HTML;
26: <HTML><BODY>
27: <CENTER><FONT SIZE=5>
28: Record added to database
29: <P>
30: <A HREF="/sql/index.html">Return to Main Page</A>
31: </P>
32: </FONT></CENTER>
33: </BODY></HTML>
34: HTML
35: } # End of subroutine
36: ################ END PRINT OUTPUT SUBROUTINE
delete.cgi löscht Einträge aus der Datenbank
1: #!/usr/bin/perl
2: use CGI qw/:standard/;
3: require "common.sub";
4: print header;
5: $email = $ENV{QUERY_STRING};
6: &Create_DB_Connection;
7: &delete_record;
8: &print_results;
9: # Disconnect from the database
10: $dbh->disconnect;
11: ################ BEGIN DELETE RECORD SUBROUTINE
12: sub delete_record{
13: $SQL="DELETE FROM phones WHERE email = '$email'";
14: &Do_SQL;
15: }
16: ################ END DELETE RECORD SUBROUTINE
17: ################ BEGIN PRINT RESULTS SUBROUTINE
18: sub print_results{
19: print <<HTML;
20: <HTML><HEAD><TITLE>Delete Thing</TITLE></HEAD>
21: <BODY BGCOLOR="#FFFFFF">
22: <CENTER><FONT SIZE=6>Delete Results</FONT></CENTER>
23: <HR WIDTH=80%>
24: <P>
25: <CENTER>
26:
<FONT SIZE=6>Record Deleted!</FONT>
27: </CENTER>
28: <P>
29: <HR WIDTH=80%>
30: <P>
31: <CENTER>
32: <FONT SIZE=4>
33:
<A HREF="/sql/index.html">Main Page</A>
34: </FONT>
35: </CENTER>
36: </BODY></HTML>
37: HTML
38: # Release the statement handle resources
39: $sth->finish;
40: } # End of print_results subroutine
41: ################ END PRINT RESULTS SUBROUTINE
modify.cgi ertsellt ein ausfüllbares HTML-Formular
1: #!/usr/bin/perl
2: ### modify1.cgi
3: use CGI qw/:standard/;
4: require "common.sub";
5: print header;
6: $email = $ENV{QUERY_STRING};
7: $saved = $email;
8: &Create_DB_Connection;
9: &get_data;
10: &print_output;
11: # Disconnect from the database
12: $dbh->disconnect;
13: ################ BEGIN GET DATA SUBROUTINE
14: sub get_data{
15: $SQL="SELECT * FROM phones WHERE email = '$email'";
16: &Do_SQL;
17: while ($pointer = $sth->fetchrow_hashref){
18: $f_name = $pointer->{'first_name'};
19: $l_name = $pointer->{'last_name'};
20: $phone = $pointer->{'phone'};
21: $email = $pointer->{'email'};
22: $notes = $pointer->{'notes'};
23: }
24: } # End of get_data subroutine.
25: ################ END GET DATA SUBROUTINE
26: ################ BEGIN PRINT OUTPUT SUBROUTINE
27: sub print_output{
28: print<<HTML;
29: <HTML><HEAD><TITLE>Add Thing</TITLE></HEAD>
30: <BODY BGCOLOR="#FFFFFF">
31: <FORM ACTION="/cgi-bin/sql/modify2.cgi?$saved" METHOD="Post">
32: <CENTER><FONT SIZE=6>Modify Record</FONT></CENTER>
33: <HR WIDTH=80%>
34: <P>
35: <CENTER><TABLE BORDER=1 CELLSPACING=0>
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
<TR>
<TD BGCOLOR="#c0c0c0" COLSPAN=2>
<CENTER><B>MySQL/Perl Integration Example</B></CENTER>
</TD>
</TR>
<TR>
<TD BGCOLOR="#c0c0c0"><B>First Name:</B></TD>
<TD><INPUT TYPE=TEXT SIZE=32 NAME="first_name" VALUE=$f_name></TD>
</TR>
<TR>
<TD BGCOLOR="#c0c0c0"><B>Last Name:</B></TD>
<TD><INPUT TYPE=TEXT SIZE=32 NAME="last_name" VALUE=$l_name></TD>
</TR>
<TR>
<TD BGCOLOR="#c0c0c0"><B>Phone:</B></TD>
<TD><INPUT TYPE=TEXT SIZE=32 NAME="phone" VALUE="$phone"></TD>
</TR>
<TR>
<TD BGCOLOR="#c0c0c0"><B>E-mail:</B></TD>
<TD><INPUT TYPE=TEXT SIZE=32 NAME="email" VALUE="$email"></TD>
</TR>
<TR>
<TD BGCOLOR="#c0c0c0"><B>Notes:</B></TD>
<TD><TEXTAREA NAME=notes WRAP=PHYSICALROWS=3COLS=30>$notes</TEXTAREA></TD>
</TR>
<TR>
<TD BGCOLOR="#c0c0c0" COLSPAN=2>
<CENTER><INPUT TYPE=SUBMIT VALUE="Modify Record"></CENTER></TD>
</TR>
</TABLE></CENTER>
<P>
<HR WIDTH=80%>
<P>
68: <CENTER>
69: <FONT SIZE=4>
70: <A HREF="/sql/index.html">Main Page</A>
71: </FONT>
72: </CENTER>
73: </FORM>
74: </BODY></HTML>
75: HTML
76: } # End of subroutine.
77: ################ END PRINT OUTPUT SUBROUTINE
modify2.cgi modifiziert die Datenbank
1: #!/usr/bin/perl
2: ### modify2.cgi
3: use CGI qw/:standard/;
4: require "common.sub";
5: $old_email = $ENV{QUERY_STRING};
6: $f_name = &filter(param(first_name));
7: $l_name = &filter(param(last_name));
8: $phone = &filter(param(phone));
9: $email = &filter(param(email));
10: $notes = &filter(param(notes));
11: print header;
12: &Create_DB_Connection;
13: &write_data;
14: &print_output;
15: # Disconnect from the database
16: $dbh->disconnect;
17: ################ BEGIN WRITE DATA SUBROUTINE
18: sub write_data{
19: $SQL="UPDATE phones SET
20:
first_name = '$f_name',
21:
last_name = '$l_name',
22:
phone = '$phone',
23:
email = '$email',
24:
notes = '$notes'
25:
26:
27:
WHERE
email = '$old_email'
";
28: &Do_SQL;
29: } # End of write_data
30: ################ END WRITE DATA SUBROUTINE
31: ################ BEGIN PRINT OUTPUT SUBROUTINE
32: sub print_output{
33: print<<HTML;
34: <HTML><BODY>
35: <CENTER><FONT SIZE=5>
36: Record modified in database
37: <P>
38: <A HREF="/sql/index.html">Return to Main Page</A>
39: </P>
40: </FONT></CENTER>
41: </BODY></HTML>
42: HTML
43: } # End of subroutine
44: ################ END PRINT OUTPUT SUBROUTINE
Quelle: http://www.inlink.com/~perlguy/sql
Ein in Perl programmiertes Adressbuch
QUELLE: Linux-Magazin Verlag 1999
QUELLE: Linux-Magazin Verlag 1999
VERWEISE:
http://www.geocities.com/ResearchTriangle/Node/9672/sqltut.html
http://webreview.com/wr/pub/Perl
http://postgresql.nextpath.com/
http://reference.perl.com/query.cgi?database
http://www.w3.org/Security/Faq/www-security-faq.html
http://www.perl.com
http://www.perl.org
http://www.apache.org
http://www.akopia.de ... Akopia Interchange ist ein kompletter Shop in Perl
http://www.cp.tc.ca ... Community Portal in Perl
sämtliche Bücher im O´Reilly - Verlag (Larry Wall, Randal Schwartz, ...)
Herunterladen