1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>SELFHTML: Perl / Perl lokal auf einem PC einrichten</title>
<meta name="description" content="Wie Sie den Perl-Interpreter auf Ihrem Rechner installieren, um CGI-Scripts mit Perl auszutesten.">
<meta name="keywords" content="SELFHTML, CGI, Perl, Perl-Interpreter">
<meta name="author" content="Redaktion SELFHTML, selfhtml81@selfhtml.org">
<meta name="robots" content="noindex, nofollow">
<meta name="DC.Publisher" content="SELFHTML e. V.">
<meta name="DC.Date" content="2005-11-09T00:29:27+01:00">
<meta name="DC.Identifier" content="http://de.selfhtml.org/perl/intro.htm">
<meta name="DC.Language" content="de">
<meta name="DC.Rights" content="../../editorial/copyright.htm">
<meta name="DC.Date.created" content="2001-10-27T08:00+01:00">
<meta name="SELF.Pagetype" content="page">
<link rel="stylesheet" type="text/css" href="../src/selfhtml.css">
<link rel="alternate" type="application/atom+xml" title="SELFHTML-Weblog (Atom, gesamt)" href="http://aktuell.de.selfhtml.org/weblog/atom-feed">
<link rel="alternate" type="application/rss+xml" title="SELFHTML-Weblog (RSS, Auszge)" href="http://aktuell.de.selfhtml.org/weblog/rss-feed">
<link rel="shortcut icon" type="image/x-icon" href="../src/favicon.ico">
<link rel="author" title="Impressum" href="../editorial/impressum.htm">
<link rel="contents" title="Inhaltsverzeichnis" href="../navigation/inhalt.htm">
<link rel="index" title="Stichwortverzeichnis" href="../navigation/stichwort.htm">
<link rel="search" title="Suche" href="../navigation/suche/index.htm">
<link rel="help" title="Hilfe" href="../editorial/index.htm">
<link rel="copyright" title="Urheberrecht" href="../editorial/copyright.htm">
<link rel="top" title="SELFHTML" href="../index.htm">
<link rel="up" title="Perl" href="index.htm">
<link rel="next" title="CGI-notwendige Anweisungen in Perl" href="sprache/cginotwendig.htm">
<link rel="prev" title="Bilderbuch zum Umblttern" href="../dhtml/beispiele/bilderbuch.htm">
</head>
<body>
<table cellpadding="4" cellspacing="0" border="0" width="100%">
<tr>
<td colspan="2" class="nav"><a class="an" name="top"><img src="../src/refkap.gif" width="16" height="13" alt="Teil von"></a> <a href="../index.htm">SELFHTML</a>/<a href="../navigation/index.htm" target="_parent" class="navh">Navigationshilfen</a> <img src="../src/refkap.gif" width="16" height="13" alt="Teil von"> <a href="index.htm">Perl</a></td>
</tr>
<tr>
<td class="doc" width="110"><a href="../index.htm"><img src="../src/logo.gif" width="106" height="109" border="0" alt="SELFHTML"></a></td>
<td class="docbot" width="100%"><h1 class="ph1">Einfhrung in Perl</h1></td>
</tr>
<tr>
<td class="doctop">
<img src="../src/dokx.gif" width="30" height="20" vspace="6" alt="Informationsseite">
</td>
<td valign="top" nowrap="nowrap">
<p>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#perlinterpreter">Der Perl-Interpreter</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#installieren">Perl-Interpreter installieren</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#testen">Perl-Interpreter mit CGI-Script testen</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#aufruf">Aufrufmglichkeiten des Perl-Interpreters</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#erstezeile">Erste Zeile eines Perl-Scripts</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#anweisungen">Anweisungen notieren</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#anweisungsbloecke">Anweisungsblcke notieren</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#kommentare">Kommentare in Perl</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#namensvergabe">Regeln fr selbst vergebene Namen</a><br>
<img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#programmierstil">Sauberer Programmierstil</a><br>
</p>
</td>
</tr><tr><td colspan="2" class="doc"> <a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a> </td></tr>
</table>
<h2><a class="an" name="perlinterpreter">Der Perl-Interpreter</a></h2>
<p>Der Perl-Interpreter ist freie Software nach dem Recht der Artistic License (<img src="../src/en.gif" width="16" height="10" alt="englischsprachige Seite"> <a target="_top" href="http://www.perl.com/language/misc/Artistic.html">http://www.perl.com/language/misc/Artistic.html</a>) und fr etliche Betriebssysteme verfgbar. Auerdem ist der Quellcode des Interpreters verfgbar, sodass Sie ihn, wenn Sie einen C-Compiler haben, fr Ihren Rechner compilieren knnen. Sie knnen den Perl-Interpreter aus dem WWW downloaden.</p>
<p>Im Link-Verzeichnis des Online-Angebots von SELFHTML aktuell finden Sie weitere Links zu den Downloadmglichkeiten des Perl-Interpreters:</p>
<p><img src="../src/serverdok.gif" width="15" height="10" alt="Online-Seite"> <a target="_top" href="http://aktuell.de.selfhtml.org/links/cgiperl.htm">SELFHTML-Linkverzeichnis: Perl</a></p>
<p>Fr Windows-Anwender ist das Angebot <strong>ActivePerl</strong> von <img src="../src/en.gif" width="16" height="10" alt="englischsprachige Seite"> <a target="_top" href="http://www.activestate.com">ActiveState</a> zu empfehlen, da es sehr einfach zu installieren ist und die umfangreiche Perl-Originaldokumentation im HTML-Format zum Lesen im Browser mitgeliefert wird.</p>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="installieren">Perl-Interpreter installieren</a></h2>
<p>Je nach Betriebssystemumgebung mssen Sie den Perl-Interpreter manuell installieren, oder ein automatisch aufgerufenes Installationsprogramm fhrt fr Sie alle ntigen Kopiervorgnge und Einstellungen durch. Wenn es kein ausfhrbares Installationsprogramm gibt, finden Sie nach dem Entpacken des heruntergeladenen Sourcen-Archivs auf jeden Fall Hilfedateien vor, in denen beschrieben wird, wie der Interpreter zu installieren ist.</p>
<p>Wenn Sie den Perl-Interpreter fr die <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href=" ../intro/schnittstellen/cgi.htm">CGI-Schnittstelle</a> Ihres eigenen Webservers nutzen wollen, mssen Sie beim <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="../servercgi/server/allgemein.htm">Einrichten des eigenen WWW-Servers</a> je nach Betriebssystemumgebung und Server-Software eventuell den vollstndigen Pfadnamen der ausfhrbaren Perl-Interpreter-Datei angeben. Nach einer typischen Installation des Perl-Interpreters liegt diese im Programmunterverzeichnis <var>bin</var> und heit <var>perl</var> oder (unter Windows) <var>perl.exe</var>.</p>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="testen">Perl-Interpreter mit CGI-Script testen</a></h2>
<p>Wenn Sie einen <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="../servercgi/server/allgemein.htm">lokalen Webserver</a> installiert und in dessen Einstellungen ein CGI-Verzeichnis bestimmt haben, knnen Sie nach der Installation des Perl-Interpreters Ihr erstes eigenes lokales CGI-Script ausfhren. Den Quellcode des folgenden Perl-Scripts knnen Sie mit einem Texteditor im eingestellten CGI-Verzeichnis beispielsweise unter dem Namen <var>test.pl</var> abspeichern. Angenommen, Ihr CGI-Verzeichnis heit wie blich <var>cgi-bin</var> und der Webserver ist gestartet, dann knnen Sie das Script im Browser mit der Adresse <var>http://127.0.0.1/cgi-bin/test.pl</var> oder auch mit der Adresse <var>http://localhost/cgi-bin/test.pl</var> aufrufen.</p>
<h3 class="xmp"><a class="an" name="intro1">Beispiel: Datei <var>test.pl</var></a></h3>
<p><img src="../src/dokf.gif" width="15" height="10" alt="Beispiel-Seite"> <a href="http://de.selfhtml.org/cgi-bin/812/intro1.pl">Anzeigebeispiel: So sieht's aus</a> (Zum Aufruf des Scripts ist eine Internet-Verbindung erforderlich)</p>
<pre>
#!/usr/bin/perl -w
use strict;
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
print "<h1>Hurra, es klappt!</h1>\n";
print "</body></html>\n";
</pre>
<h3 class="xpl">Erluterung:</h3>
<p>Das Script gibt, wenn es aufgerufen wird, einfach ein wenig HTML-Code aus. Auf die Perl-Anweisungen wird an dieser Stelle noch nicht nher eingegangen. Nur die <img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#erstezeile">erste Zeile des Scripts</a> (die so genannte <i>shebang</i>) mssen Sie mglicherweise anpassen. Dort, wo im Beispiel <code>#!/usr/bin/perl</code> steht, mssen Sie, falls Sie beim Aufruf eine Fehlermeldung wie <i>Internal Server Error</i> erhalten, den kompletten Pfad zur ausfhrbaren Datei, also zum Perl-Interpreter, angeben. Wenn Sie den Perl-Interpreter unter Windows beispielsweise in <var>c:\programme\perl</var> installiert haben, lautet Ihre erste Script-Zeile also:
<br><code>#!c:/programme/perl/bin/perl</code><br>
Die Dateinamen-Erweiterung <i>.exe</i> knnen Sie ohne weiteres weglassen.</p>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="aufruf">Aufrufmglichkeiten des Perl-Interpreters</a></h2>
<p>Um eigene Perl-Scripts auszufhren bzw. zu testen mssen Sie den <img src="../src/up.gif" width="14" height="10" alt="nach oben"> <a href="#perlinterpreter">Perl-Interpreter</a> installiert haben. Um Perl als Sprache fr CGI-Scripts einzusetzen, muss auerdem ein <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="../servercgi/server/index.htm">Webserver</a> installiert sein.</p>
<p>Bei CGI-Scripts fordert der aufrufende Browser vom Webserver ber HTTP eine Datei an, die der Webserver als auszufhrendes Script erkennt. Um zu erfahren, ob die vom Browser angeforderte Datei ein auszufhrendes CGI-Script ist, prft der Webserver verschiedene Kriterien:</p>
<ul>
<li>Das Script liegt in einem Verzeichnis, das aus Sicht des Webservers als mgliches Verzeichnis fr CGI-Scripts definiert ist (z.B. <var>cgi-bin</var> und dessen Unterverzeichnisse).</li>
<li>Bei der Scriptdatei sind die Zugriffsrechte so gesetzt, dass der Benutzer, unter dem der Webserver luft, das Recht hat, die Datei auszufhren. Dies gilt vor allem fr Unix-basierte Systeme.</li>
<li>Die Scriptdatei hat eine Dateiendung, die vom System als Endung fr Perl-Scripts erkannt wird, z.B. <var>.pl</var> oder <var>.cgi</var>.</li>
<li>Die erste Zeile des Perl-Scripts enthlt eine so genannte "Shebang"-Anweisung (Slang, auszusprechen als <i>schibng</i>). Diese Anweisung ist fr einen auslesenden Prozess (das kann ein Serverprogramm sein oder eine Shell) der Hinweis darauf, welches Programm fr die Interpretation des Quelltextes dieser Scriptdatei aufgerufen werden soll. Siehe auch <img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#erstezeile">Erste Zeile eines Perl-Scripts</a>.</li>
</ul>
<p>Diese Faktoren bewirken, dass, wenn der Browser ein Perl-Script im CGI-Verzeichnis aufruft, der Webserver entsprechend reagiert und den Quelltext des Scripts nicht einfach an den Browser sendet, sondern den Perl-Interpreter bittet, die im CGI-Script enthaltenen Anweisungen auszufhren und das Ergebnis an ihn zur Auslieferung an den Browser zurckzugeben.</p>
<p>Perl ist ursprnglich nicht fr CGI-Scripts entwickelt worden, sondern dafr, in einem Unix-basierten System komplexe Installations-, Wartungs- und Informationsaufgaben zu erfllen. Dass es auch ber die CGI-Schnittstelle angesprochen werden kann, war in seiner Entwicklung eher ein zuflliger Nebeneffekt. Perl-Scripts knnen also zahllose Aufgaben auf einem Rechner bernehmen, z.B. Backups organisieren, die Rechnerauslastung analysieren, in Dateien nach etwas suchen und es durch etwas anderes ersetzen usw. Um Perl-Scripts auszufhren, die nicht als CGI-Scripts eingesetzt werden, mssen Sie einen Zugang zu einer Shell oder Kommandozeile auf dem Rechner haben. Am lokalen PC und unter Windows knnen Sie ein DOS-Fenster (Eingabeaufforderung) ffnen. Dann knnen Sie den Perl-Interpreter vom Prompt aus aufrufen. Bei Unix-basierten Systemen bentigen Sie einen Zugang als Benutzer. Nach dem Anmelden am System erhalten Sie eine Shell, also eine benutzereigene Kommandozeile. Von dort aus knnen Sie den Perl-Interpreter aufrufen, vorausgesetzt, Sie haben die Rechte dazu. Wenn Sie Perl-Scripts ber die Kommandozeile auf einem entfernten Rechner ausfhren wollen, also etwa auf einem ffentlichen Server, auf dem Sie Web-Speicherplatz gemietet haben, dann brauchen Sie einen Telnet- oder SSH-Zugang zu diesem Rechner. Auerdem bentigen Sie ein Telnet- oder SSH-Programm (im Online-Angebot des SELFHTML-Linkverzeichnisses finden Sie <img src="../src/serverdok.gif" width="15" height="10" alt="Online-Seite"> <a target="_top" href="http://aktuell.de.selfhtml.org/links/telnet-ssh-programme.htm">WWW-Links zu Telnet- und SSH-Programmen</a>). Mit einem solchen Programm knnen Sie sich aus der Ferne an einem Rechner anmelden und erhalten eine Shell zum Eingeben von Kommandos. Fragen Sie gegebenenfalls Ihren Provider danach, ob Sie Telnet- oder SSH-Zugang zum Server haben!</p>
<p>Von der Kommandozeile aus knnen Sie den Perl-Interpreter mit einem Perl-Script, also einer Datei mit Perl-Code, aufrufen. Solche Dateien haben die Standard-Dateinamenendung <var>.pl</var>. Der Perl-Interpreter wird normalerweise einfach durch Eingabe von <kbd>perl</kbd> gestartet. Wenn Sie beispielsweise ein Perl-Script namens <var>hallowelt.pl</var> haben, knnen Sie dieses Script mit <kbd>perl hallowelt.pl</kbd> starten. Gegebenenfalls mssen Sie sowohl den Perl-Interpreter als auch das Perl-Script mit den korrekten Pfadnamen aufrufen, unter Windows also z.B. <kbd>c:\programme\perl\bin\perl.exe c:\scripts\perl\hallowelt.pl</kbd>, unter Unix-basierten Systemen z.B. <kbd>/usr/bin/perl /scripts/perl/hallowelt.pl</kbd>.</p>
<p>Neben der reinen Angabe einer Perl-Datei gibt es Optionen beim Aufruf des Perl-Interpreters. Die Optionen folgen unmittelbar hinter dem Programmdateinamen und vor dem Namen des Perl-Scripts, also etwa <kbd>perl -c test.pl</kbd>. Sie knnen auch mehrere Optionen aneinanderhngen. Notieren Sie dazu nur ein Minuszeichen mit allen gewnschten Optionsbuchstaben hintereinander, z.B. <kbd>perl -cwT test.pl</kbd>. Auf Unix-basierten Systemen knnen Sie bei Bedarf zustzlich so genannte pipelines nutzen.</p>
<p>Die folgende Tabelle enthlt einige Optionen, die beim Aufruf des Perl-Interpreters Anwendung finden knnen.</p>
<table class="reftable" cellpadding="3" cellspacing="0" border="1">
<tr>
<th nowrap="nowrap">Option</th>
<th nowrap="nowrap">Bedeutung</th>
</tr>
<tr>
<td class="code" nowrap="nowrap"><code>-c</code></td>
<td class="tabxpl">Das Perl-Script wird nicht ausgefhrt, sondern nur in einen perl-internen Syntaxbaum kompiliert und so auf syntaktische Richtigkeit berprft.</td>
</tr>
<tr>
<td class="code" nowrap="nowrap"><code>-d</code></td>
<td class="tabxpl">Das Perl-Script wird im Debug-Modus ausgefhrt. Der Debug-Modus erlaubt das systematische Austesten des Perl-Scripts. Im Debug-Modus stehen etliche Befehle zum Kontrollieren und berprfen des Script-Ablaufs bereit.</td>
</tr>
<tr>
<td class="code" nowrap="nowrap"><code>-h</code></td>
<td class="tabxpl">Wenn Sie Perl mit dieser Option ohne Angabe eines Scripts aufrufen, gibt der Perl-Interpreter eine bersicht aller verfgbaren Optionen aus.</td>
</tr>
<tr>
<td class="code" nowrap="nowrap"><code>-S</code></td>
<td class="tabxpl">Das Script braucht nur als Dateiname ohne Pfad angegeben zu werden. Wenn es in einem der Verzeichnisse liegt, die in der <var>PATH</var>-Variablen des Betriebssystems genannt sind, findet der Perl-Interpreter das Script auch ohne Pfadangabe.</td>
</tr>
<tr>
<td class="code" nowrap="nowrap"><code>-T</code></td>
<td class="tabxpl">Das Script wird im so genannten "tainted"-Modus ausgefhrt. Das heit, alle Daten, die das Perl-Script von auen bekommt, werden vom Perl-Interpreter besonders gekennzeichnet und mssen vom Script bei kritischen Operationen speziell bearbeitet werden, bevor sie benutzt werden knnen.</td>
</tr>
<tr>
<td class="code" nowrap="nowrap"><code>-v</code></td>
<td class="tabxpl">Gibt die Version und den genauen Stand des Perl-Interpreters aus.</td>
</tr>
<tr>
<td class="code" nowrap="nowrap"><code>-w</code></td>
<td class="tabxpl">Bewirkt, dass der Perl-Interpreter nicht nur offensichtliche Fehlermeldungen bei Syntaxfehlern ausgibt, sondern auch Warnungen bei mglichen Fehlern, logisch zweifelhaften Anweisungsfolgen, undefinierten Zuweisungen usw.</td>
</tr>
</table>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="erstezeile">Erste Zeile eines Perl-Scripts</a></h2>
<p>In der ersten Zeile eines Perl-Scripts, der so genannten "Shebang-Zeile", muss eine Anweisung stehen, die angibt, wo sich die ausfhrbare Datei des Perl-Interpreters befindet.</p>
<h3 class="xmp"><a class="an" name="intro2">Beispiel eines vollstndigen Perl-Scripts:</a></h3>
<p><img src="../src/dokf.gif" width="15" height="10" alt="Beispiel-Seite"> <a href="http://de.selfhtml.org/cgi-bin/812/intro2.pl">Anzeigebeispiel: So sieht's aus</a> (Zum Aufruf des Scripts ist eine Internet-Verbindung erforderlich)</p>
<pre>
#!/usr/bin/perl
print "Hallo Welt\n";
</pre>
<h3 class="xpl">Erluterung:</h3>
<p>Die Anweisung zur Lage des Perl-Interpreters auf dem Rechner beginnt mit den Zeichen <code>#!</code>, der so genannten shebang, gefolgt von der Pfadangabe und dem Namen des Perl-Interpreters. Ab der zweiten Zeile knnen Sie Perl-Code notieren, wie im Beispiel die Ausgabe der beiden Wrter <code>Hallo Welt</code>.</p>
<p>Die Anweisung zur Lage des Perl-Interpreters auf dem Rechner wird vor allem von Unix-basierten Systemen ausgewertet, und zwar dann, wenn die Perl-Datei auf den Modus "ausfhrbar" gesetzt ist. Die Datei kann dann direkt aufgerufen werden und startet den Perl-Interpreter. Wenn Sie unter anderen Umgebungen als Unix arbeiten, notieren Sie einfach die bliche Zeile mit der blichen Pfadangabe (<code>#!/usr/bin/perl</code>) in der ersten Zeile Ihres Perl-Scripts. Sollte das Script dann nicht ausgefhrt werden bzw. eine Fehlermeldung produzieren, notieren Sie den genauen Pfad der ausfhrbaren Datei des Perl-Interpreters. Trennen Sie dabei die Verzeichnisse durch einfache Schrgstriche. Eine typische Angabe unter Windows ist beispielsweise<br>
<code>#!C:/programme/perl/bin/perl.exe</code>.</p>
<h3 class="inf">Beachten Sie:</h3>
<p>Bei Webservern mit CGI-Untersttzung hngt es vom Webserver-Produkt ab, ob die Zeile fr die Lage des Perl-Interpreters ausgelesen wird. Zu den <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="../servercgi/server/allgemein.htm#grundeinstellungen">Grundeinstellungen eines Webservers</a> gehrt mittlerweile auch die Angabe des Pfades zum Perl-Interpreter. Wenn dann bei laufendem Webserver ein Perl-Script ber das HTTP-Protokoll ausgefhrt wird, ruft der Webserver den Perl-Interpreter entsprechend seiner Konfiguration auf.</p>
<p>Wenn der Perl-Interpreter im Suchpfad fr ausfhrbare Programme liegt, der z.B. in der Umgebungsvariablen <var>PATH</var> gespeichert ist, dann gengt es, in der ersten Zeile des Perl-Scripts zu notieren:<br>
<code>#!perl</code></p>
<p>Wenn Ihr Webserver ein Apache ist und Sie uneingeschrnkten Zugang zu seiner Konfigurationsdatei (<var>httpd.conf</var>) haben, knnen Sie dort auch die Anweisung <code>ScriptInterpreterSource registry</code> notieren. Eine solche Anweisung bewirkt, dass Apache in der Windows-registry nach dem Pfad sucht, mit dem der Perl-Interpreter angesprochen werden kann und die "shebang" umgeht. Das funktioniert jedoch nur dann, wenn in der registry unter HKEY_CLASSES_ROOT eine entsprechende Dateinamensendung, beispielsweise .pl, eingetragen ist und fr diese Dateinamensendung auch ein Schlssel <kbd>Shell\ExecCGI\Command</kbd> oder <kbd>Shell\Open\Command</kbd> existiert. Ist kein solcher Schlssel vorhanden, wird zuletzt auf die "shebang" zurckgegriffen, und wenn dort dann ein nicht zutreffender Pfad eingetragen ist, erfolgt eine Fehlermeldung an den aufrufenden Browser.</p>
<p>Hinter der Pfadangabe zum Perl-Interpreter kann, durch Leerraum getrennt, auch noch eine Aufrufoption folgen wie in der Tabelle bei den <img src="../src/up.gif" width="14" height="10" alt="nach oben"> <a href="#aufruf">Aufrufmglichkeiten des Perl-Interpreters</a> beschrieben. So knnen Sie beispielsweise notieren:<br>
<code>#!/usr/bin/perl -w</code><br>
Damit weisen Sie den Perl-Interpreter an, neben Fehlern auch Warnungen zu melden. Diese Option wird von Perl-Programmierern gerne empfohlen (siehe auch <img src="../src/down.gif" width="14" height="10" alt="nach unten"> <a href="#programmierstil">Sauberer Programmierstil</a>).</p>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="anweisungen">Anweisungen notieren</a></h2>
<p>Perl-Scripts bestehen, wie die Scripts anderer Programmiersprachen auch, aus einer kontrollierten Anordnung von Anweisungen. Das sind Befehle, die der Perl-Interpreter bewertet und in einen Maschinencode bersetzt (kompiliert), der auf dem betreffenden Rechner ausfhrbar ist.</p>
<p>Es gibt einfache und komplexere Anweisungen.</p>
<h3 class="xmp"><a class="an" name="intro3">Beispiel eines vollstndigen Perl-Scripts:</a></h3>
<p><img src="../src/dokf.gif" width="15" height="10" alt="Beispiel-Seite"> <a href="http://de.selfhtml.org/cgi-bin/812/intro3.pl">Anzeigebeispiel: So sieht's aus</a> (Zum Aufruf des Scripts ist eine Internet-Verbindung erforderlich)</p>
<pre>
#!/usr/bin/perl
$Zahl = 42;
$Quadrat = $Zahl * $Zahl;
print "Das Quadrat von ", $Zahl, " = ", $Quadrat, "\n";
</pre>
<h3 class="xpl">Erluterung:</h3>
<p>Eine Anweisung besteht in Perl aus einem Befehl, der normalerweise mit einem Semikolon <code>;</code> abgeschlossen wird. Der Befehl kann an verschiedene Bedingungen gebunden sein.</p>
<p>Eine Anweisung ist es zum Beispiel:</p>
<ul>
<li>wenn Sie einer Variablen einen Wert zuweisen, wie oben in Beispiel in der Anweisung <code>$Zahl = 42;</code>.</li>
<li>wenn Sie mit Variablen oder Werten eine Operation durchfhren, wie oben in der zweiten Anweisung.</li>
<li>wenn Sie eine <img src="../src/kap.gif" width="15" height="13" alt="Kapitel"> <a href="funktionen/index.htm">Perl-Funktion</a> aufrufen, wie oben in der dritten Anweisung die Funktion <code>print</code>.</li>
</ul>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="anweisungsbloecke">Anweisungsblcke notieren</a></h2>
<p>Ein Anweisungsblock besteht aus einer oder mehreren einzelnen <img src="../src/up.gif" width="14" height="10" alt="nach oben"> <a href="#anweisungen">Anweisungen</a>, die innerhalb einer bergeordneten Anweisung stehen. So knnen Anweisungsblcke beispielsweise innerhalb einer <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/bedingt.htm">bedingten Anweisung</a> oder innerhalb einer <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/schleifen.htm">Schleife</a> stehen. Auch alle Anweisungen, die innerhalb einer <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/subroutinen.htm">Subroutine</a> stehen, bilden einen Anweisungsblock.</p>
<h3 class="xmp">Beispiel 1:</h3>
<pre>
if($Zahl > 1000) {
$Zahl = 0;
}
</pre>
<h3 class="xmp">Beispiel 2:</h3>
<pre>
for(my $i = 1;$i <= 99;$i = $i + 1) {
print "Das Quadrat von ", $i, " ist ", $i * $i, "\n";
}
</pre>
<h3 class="xpl">Erluterung:</h3>
<p>Ein Anweisungsblock wird durch eine ffnende geschweifte Klammer <code>{</code> begonnen und durch eine schlieende geschweifte Klammer <code>}</code> beendet.</p>
<p>Bei bedingten Anweisungen (wie in Beispiel 1) oder bei Schleifen (wie in Beispiel 2) mssen Sie solche Anweisungsblcke notieren, auch wenn nur eine einzige Anweisung von der Bedingung oder der Schleifenbedingung abhngig ausgefhrt werden soll.</p>
<p>Anweisungsblcke knnen auch verschachtelt werden.</p>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="kommentare">Kommentare in Perl</a></h2>
<p>Wie jede bessere Programmiersprache erlaubt Perl das Notieren von Kommentaren. Kommentare werden nicht als Code interpretiert, sondern erlutern das Script oder machen den Code fr den Programmierer besser lesbar.</p>
<h3 class="xmp">Beispiel:</h3>
<pre>
#=========================================
# es folgt die Ausgabe der Quadratzahlen
# von 1 bis 99
#=========================================
for(my $i = 1;$i <= 99;$i = $i + 1) {
# Hier wird das Quadrat der Zahlen ausgegeben
print "Das Quadrat von ", $i, " ist ", $i * $i, "\n";
}
</pre>
<h3 class="xpl">Erluterung:</h3>
<p>Kommentare in Perl beginnen mit einem Gatterzeichen <code>#</code>. Alles, was hinter dem Gatterzeichen bis zum Ende der Zeile steht, wird von Perl ignoriert. Beginnt eine Zeile mit dem Gatterzeichen, ist die gesamte Zeile ein Kommentar. Viele Perl-Programmierer nutzen die Kommentartechnik auch, um ihre Scripts optisch kunstvoll zu gestalten. Das obige Beispiel zeigt solch ein optisches Konstrukt mit Gleichheitszeichen.</p>
<h3 class="inf">Beachten Sie</h3>
<p>Neben der einfachen Auskommentierung besteht auch die Mglichkeit, grere Abschnitte des Scripts als Dokumentation auszuweisen. Solche Dokumentationen knnen mit dem Programm <var>perldoc</var>, das zum Lieferumfang des Perl-Interpreters gehrt, separat gelesen werden. Bei komplexeren Scripts knnen Sie so die Dokumentation gleich zum Script mit dazuliefern. Im Zusammenhang mit Modulen wird im Abschnitt <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="module/intro.htm#perldoc">Moduldokumentationen lesen mit perldoc</a> beschrieben, wie solche Abschnitte aussehen. Was dort fr Module beschrieben wird, funktioniert in jedem Perl-Script.</p>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="namensvergabe">Regeln fr selbst vergebene Namen</a></h2>
<p>An vielen Stellen in Perl mssen Sie selbst Namen vergeben, zum Beispiel fr Variablen wie <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/skalare.htm">Skalare</a>, <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/listen.htm">Arrays</a> oder <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/hashes.htm">Hashes</a>, sowie fr <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/subroutinen.htm">Subroutinen</a>.</p>
<h3 class="xmp">Beispiel:</h3>
<pre>
my $Daten = $ENV{'QUERY_STRING'};
</pre>
<h3 class="xpl">Erluterung:</h3>
<p>Im Beispiel ist <code>Daten</code> ein selbst vergebener Name. Bei selbst vergebenen Namen gelten folgende Regeln:</p>
<ul>
<li>Sie drfen keine Leerzeichen enthalten.</li>
<li>Sie mssen mit einem Buchstaben oder einem Unterstrich <code>_</code> beginnen. Mit einer Ziffer oder einem anderen Zeichen drfen sie nicht beginnen.</li>
<li>Es sind Gro- und Kleinbuchstaben erlaubt. Gro- und Kleinschreibung wird aber auch unterschieden. Das heit, zwei Variablennamen wie <code>$user</code> und <code>$User</code> bezeichnen unterschiedliche Variablen!</li>
<li>Sie drfen keine deutschen Umlaute oder scharfes S enthalten, nur die Buchstaben A bis Z und a bis z und die Ziffern 0 - 9.</li>
<li>Sie drfen Unterstriche <code>_</code> enthalten.</li>
</ul>
<p>Vergeben Sie sprechende Namen, die Ihnen auch ein halbes Jahr, nachdem Sie das Perl-Script geschrieben haben, noch signalisieren, welche Bedeutung sie haben. Es drfen ruhig auch deutschsprachige Wrter sein, solange die genannten Regeln eingehalten werden.</p>
<h3>Beachten Sie:</h3>
<p>Seit Perl-Version 5.6.0 knnen Perl-Scripts auch in Unicode notiert werden. Damit ist es mglich, auch beispielsweise Umlaute in Variablennamen zu verwenden. Die Perl-Scripts mssen dann UTF-8-kodiert sein. In einem Editor, der diese Kodierung nicht beherrscht, sieht dann eine Variable <code>$Strae</code> beispielsweise so aus: <code>$Straße</code></p>
<p class="doc"><a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a></p>
<h2><a class="an" name="programmierstil">Sauberer Programmierstil</a></h2>
<p>Es gibt ein paar Dinge, die ein sauber geschriebenes Perl-Script enthalten sollte. Ohne diese Dinge funktionieren die meisten Perl-Scripts zwar genauso gut, aber kritische (mehrdeutige) Anweisungen im Quelltext fallen dann nicht auf und knnen leichter zu Fehlern fhren. Das folgende kleine Perl-Script enthlt ein paar Dinge, die von Perl-Programmierern zum sauberen Programmieren empfohlen werden.</p>
<h3 class="xmp"><a class="an" name="intro4">Beispiel eines vollstndigen CGI-Scripts in Perl:</a></h3>
<p><img src="../src/dokf.gif" width="15" height="10" alt="Beispiel-Seite"> <a href="http://de.selfhtml.org/cgi-bin/812/intro4.pl">Anzeigebeispiel: So sieht's aus</a> (Zum Aufruf des Scripts ist eine Internet-Verbindung erforderlich)</p>
<pre>
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
my $headline = "Ein sauberes Script!";
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test</title></head><body>\n";
print "<h1>$headline</h1>\n";
print "<p>nur auf das CGI-Modul wurde hier verzichtet ;-)</p>\n";
print "</body></html>\n";
</pre>
<h3 class="xpl">Erluterung:</h3>
<p>Zu den empfohlenen Manahmen sauberer Programmierung zhlt auf jeden Fall die Verwendung der Aufrufoption <code>-w</code> in der ersten Zeile des Scripts. Dadurch gibt der Perl-Interpreter Warnungen zu zweifelhaften Befehlen aus, bevor er das Script ausfhrt. Manche Unsauberkeiten im Quellcode werden so ohne zeitraubende Suche erkannt.</p>
<p>In die gleiche Richtung zielt die Anweisung <code>use strict;</code>. Damit wird ein spezielles <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="module/standardmodule.htm#pragma_module">Pragma-Modul</a> eingebunden, das bewirkt, dass der Perl-Interpreter keine unsicheren Konstrukte akzeptiert, bevor er das Script ausfhrt. Das knnen zum Beispiel nicht definierte Variablen sein. Auch damit lassen sich Fehler vermeiden, die durch unachtsames oder schlampiges Programmieren entstehen knnen und bei einer toleranteren Interpretation des Quelltextes nicht auffallen.</p>
<p>Die Anweisung <code>use CGI::Carp qw(fatalsToBrowser);</code> wird Programmierern, die Perl-Scripts fr die CGI-Schnittstelle entwickeln wollen, dringend empfohlen. Sie bindet eine Funktion eines speziellen Modul ein, das beim ungewollten Abbruch des Scripts aufgrund eines Syntaxfehlers oder einer Anweisung wie <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="funktionen/kontrolle.htm#die">die</a> die Fehlerursache in HTML umwandelt und direkt auf die Standardausgabe schreibt, also an den aufrufenden Browser bergibt. Auf diese Weise ersparen es sich CGI-Programmierer, beim Scriptabbruch in der meist langen Error-Log-Datei des Webservers nach der Fehlermeldung zu suchen. Diese Anweisung nutzt jedoch nichts, wenn bereits Fehler auftreten, bevor der Perl-Interpreter ausgefhrt werden kann, also etwa, wenn die erste Zeile des Perl-Scripts eine falsche Lage des Perl-Interpreters ausweist.</p>
<p>Wenn Sie <code>use strict;</code> angeben, zwingt Perl Sie dazu, alle Ihre Variablen vor der ersten Verwendung zu deklarieren (z.B. mit <code>my</code>). Im obigen Beispiel ist dies bei der Initialisierung von <code>$headline</code> der Fall. Dies hat den Vorteil, dass ein Programmabbruch erfolgt, wenn Sie im weiteren Verlauf des Scripts einen Variablennamen falsch geschrieben haben. Die Verwendung von <code>my</code> bewirkt, dass eine Variable nur in der aktuellen Datei oder im aktuellen Anweisungsblock gltig ist. Nheres dazu bei der Beschreibung des Befehls <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="funktionen/kontrolle.htm#my">my</a>.</p>
<p>Wie Sie dem Quellcode des obigen Beispiels entnehmen knnen, gibt das Script in seiner Ausgabe an den aufrufenden Browser mit einem verschmitzten Lcheln zu, dass es das <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="module/cgi.htm">CGI-Modul</a> nicht verwendet. Tatschlich sollten Sie sich, wenn Sie CGI-Scripts schreiben wollen, mit diesem Modul und seiner Syntax beschftigen. Es hlt fr viele CGI-Scripts ntzliche Funktionen bereit und soll an dieser Stelle ausdrcklich empfohlen werden.</p>
<p>Generell ist es empfehlenswert, auf vorhandene und bewhrte Ressourcen zurckzugreifen. Perl wird ja nicht nur alleine als Perl-Interpreter ausgeliefert, sondern mit einer ganzen Reihe von fertigen Modulen, die viele Programmieraufgaben erleichtern und die mglichen Fehlerquellen verringen. Nachdem Sie sich mit den Sprachelementen und eingebauten Funktionen von Perl etwas vertraut gemacht haben, sollten Sie sich daher auf jeden Fall auch mit den <img src="../src/kap.gif" width="15" height="13" alt="Kapitel"> <a href="module/index.htm">Perl-Modulen</a> beschftigen.</p>
<p>Bei greren Scripts sollten Sie den Quellcode auf <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/subroutinen.htm">Subroutinen</a> verteilen. Mit dieser Technik knnen Sie Anweisungsblcke definieren, die bestimmte Aufgaben bernehmen und von verschiedenen anderen Stellen im Script aus aufgerufen werden knnen. Ferner knnen Sie die Technik der Subroutinen dazu nutzen, um den Script-Ablauf in Teilprozeduren zu zerlegen und nur bestimmte Teile des Scripts auszufhren.</p>
<p>Seit Version 5 des Interpreters erlaubt Perl auch <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/objekte.htm">objektorientiertes Programmieren</a>. Das ist zwar fr Neulinge zunchst erheblich schwieriger zu begreifen, aber wenn man es sich angewhnt, werden grere Anwendungen in Perl letztlich einfacher zu programmieren sein, und der Code sieht deutlich besser (menschen-)lesbar aus. Dem Perl-Interpreter ist es eigentlich egal; objektorientierte Programmierung kann die Ausfhrung Ihrer Scripts jedoch teilweise erheblich beschleunigen.</p>
<p>Zum "sauberen Programmieren" gehren schlielich folgende allgemeine Empfehlungen:</p>
<ul>
<li><img src="../src/up.gif" width="14" height="10" alt="nach oben"> <a href="#kommentare">Kommentieren</a> Sie alle nicht-trivialen Anweisungen oder Anweisungsblcke Ihres Scripts. Sie sollten allerdings darauf achten, dass Sie auch nicht zu viel kommentieren. Ein Script, in dem auf eine Code-Zeile zehn Zeilen Kommentar kommen, ist schlecht lesbar.</li>
<li>Notieren Sie den Quelltext so, dass er bersichtlich wirkt. Dazu gehren Leerzeilen zwischen logischen Abschnitten im Script sowie Einrckungen, die vor allem bei <img src="../src/up.gif" width="14" height="10" alt="nach oben"> <a href="#anweisungsbloecke">Anweisungsblcken</a> erkennen lassen, was zum Anweisungsblock gehrt und was auerhalb davon steht. Vor allem sollte die schlieende geschweifte Klammer eines Blocks in der gleichen Textspalte stehen wie das erste Zeichen des Wortes, das den Block einleitet.</li>
<li>Verwenden Sie ein einheitliches Schema bei der Namensvergabe. Es sieht besser aus, wenn eine Reihe von Variablen die Namen <code>$name</code>, <code>$telephone</code>, <code>$mail</code> und <code>$homepage</code> haben, als wenn diese <code>$name</code>, <code>$Telefonnummer</code>, <code>$mail_Adresse</code> und <code>$Homepage</code> lauten.</li>
</ul>
<table cellpadding="4" cellspacing="0" border="0" width="100%">
<tr><td colspan="2" class="doc">
<a href="#top"><img src="../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a>
</td></tr>
<tr><td class="doc"><a href="sprache/cginotwendig.htm"><img src="../src/next.gif" width="10" height="10" border="0" hspace="10" alt="weiter"></a></td>
<td width="100%"><img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="sprache/cginotwendig.htm">CGI-notwendige Anweisungen in Perl</a>
</td></tr>
<tr>
<td class="doc"><a href="../dhtml/beispiele/bilderbuch.htm"><img src="../src/prev.gif" width="10" height="10" border="0" hspace="10" alt="zurck"></a></td>
<td><img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="../dhtml/beispiele/bilderbuch.htm">Bilderbuch zum Umblttern</a>
</td>
</tr>
<tr><td colspan="2" class="doc"> </td>
</tr>
<tr>
<td colspan="2" class="nav"><a class="an" name="bottom"><img src="../src/refkap.gif" width="16" height="13" alt="Teil von"></a> <a href="../index.htm">SELFHTML</a>/<a href="../navigation/index.htm" target="_parent" class="navh">Navigationshilfen</a> <img src="../src/refkap.gif" width="16" height="13" alt="Teil von"> <a href="index.htm">Perl</a></td>
</tr>
</table>
<p>© 2007 <img src="../src/dok.gif" width="15" height="10" alt="Seite"> <a href="../editorial/impressum.htm">Impressum</a></p>
</body>
</html>
|