Plate | Der Perl-Programmierer | E-Book | sack.de
E-Book

E-Book, Deutsch, 1234 Seiten

Plate Der Perl-Programmierer

Perl lernen - Professionell anwenden - Lösungen nutzen

E-Book, Deutsch, 1234 Seiten

ISBN: 978-3-446-42449-4
Verlag: Hanser, Carl
Format: PDF
Kopierschutz: Wasserzeichen (»Systemvoraussetzungen)



Der Perl-AlleskönnerDieses Programmierhandbuch begleitet Sie von den ersten Schritten mit Perl bis hin zu Spezialthemen und der Auswahl und Anwendung von nützlichen Tools für die tägliche Arbeit. Egal, ob Sie es als Einführung in eine neue Sprache oder als Nachschlagewerk nutzen, hier finden Sie Hilfe. Denn das steckt alles drin:- Los geht's mit einem fundierten Einstieg in die Grundlagen und Konzepte von Perl.- Weiter geht es mit komplexeren Programmieraufgaben und dem Einsatz von Perl-Modulen. Hier finden Sie Themen wie z.B. die Berechnung von Datum und Uhrzeit, Reguläre Ausdrücke, Grafik, Benutzeroberflächen und Datenbankanbindung.- Sie erhalten Einblick in Spezialthemen und praktische Methoden wie die Entwicklung von Web-Anwendungen und die Netzwerk-Programmierung, Codegenerierung, Anbindung vonLaTeX und vieles mehr.- Die Fundgrube mit nützlichen Perl-Tools zeigt Ihnen, welche bewährten Hilfsmittel es gibt, wie sie Ihnen die tägliche Arbeit erleichtern und wie sie sich an Ihre Bedürfnisse anpassen lassen. Begleitend zum Programmierhandbuch gibt es eine Webseite mit dem Source-Code der Beispiele, Lösungen zu den Aufgaben und Links zu den besprochenen Tools und Modulen.
Plate Der Perl-Programmierer jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material


1;Inhalt;6
2;Vorwort;22
3;Teil I: Grundlagen;26
3.1;1 Programmierung mit Perl;28
3.1.1;1.1 Erste Schritte;28
3.1.1.1;1.1.1 Ein Programm ausführen;31
3.1.1.2;1.1.2 Aufruf;32
3.1.1.3;1.1.3 Dokumentation;33
3.1.2;1.2 Sprachkontext;33
3.1.3;1.3 Variablen;34
3.1.3.1;1.3.1 Datentypen des Perl-Interpreters;34
3.1.3.2;1.3.2 Skalare Variablen;35
3.1.3.3;1.3.2 Vordefinierte Skalare;36
3.1.4;1.4 Operationen und Zuweisungen;38
3.1.4.1;1.4.1 Vergleichsoperatoren;39
3.1.4.2;1.4.2 Logische Operatoren und Bitmaipulation;40
3.1.4.3;1.4.3 Operatorenrangfolge;43
3.1.4.4;1.4.4 Zufallszahlen;45
3.1.4.5;1.4.5 Vordefinierte Skalarvariablen;47
3.1.4.6;1.4.6 Pragmas des Perl-Interpreters;48
3.1.5;1.5 Listen und Arrays;49
3.1.5.1;1.5.1 Unterschiede und Gemeinsamkeiten von Listen und Arrays;50
3.1.5.2;1.5.2 Array-Funktionen von Perl;54
3.1.6;1.6 Hashes;55
3.1.7;1.7 Kontrollstrukturen;61
3.1.7.1;1.7.1 Bedingte Anweisungen;62
3.1.7.2;1.7.2 Schleifenkonstrukte;64
3.1.7.3;1.7.3 Sprungbefehle;66
3.1.7.4;1.7.4 Verkürzte Strukturen;67
3.1.7.5;1.7.5 do-Blöcke;68
3.1.7.6;1.7.6 Switch-Struktur;68
3.1.7.7;1.7.7 goto-Anweisung;70
3.1.8;1.8 Unterprogramme;70
3.1.8.1;1.8.1 Parameterübergabe;72
3.1.8.2;1.8.2 Klammern oder keine Klammern?;76
3.1.8.3;1.8.2 Lebensdauer von Objekten;78
3.1.8.4;1.8.4 Default-Parameter;81
3.1.8.5;1.8.5 Vordefinierte Funktionen für Zeichenketten;82
3.1.8.6;1.8.6 Die Sortierfunktion;85
3.1.8.7;1.8.7 Vordefinierte Mathematikfunktionen;88
3.1.8.8;1.8.8 Ausführen von Systemkommandos;90
3.1.8.9;1.8.9 Die eval-Funktion;92
3.1.8.10;1.8.10 Funktionen für Datum und Uhrzeit;93
3.1.8.11;1.8.11 Aufrufkontext ermitteln;95
3.1.9;1.9 Besondere Unterprogramme: Blöcke;96
3.1.10;1.10 Rekursion und Iteration;98
3.1.11;1.11 Dateien;103
3.1.11.1;1.11.1 Dateien öffnen;104
3.1.11.2;1.11.2 Dateien schließen;106
3.1.11.3;1.11.3 Lesender Zugriff;107
3.1.11.4;1.11.4 Schreibender Zugriff;109
3.1.11.5;1.11.5 Ein- und Ausgabe mit Pipes;111
3.1.11.6;1.11.6 Dateien zum Lesen und Schreiben öffnen;112
3.1.11.7;1.11.7 Sperren des Dateizugriffes für andere Benutzer;114
3.1.11.8;1.11.8 Dateifunktionen;114
3.1.11.9;1.11.9 Dateitestoperatoren und Dateiinformationen;116
3.1.11.10;1.11.10 Das DATA-Filehandle;117
3.1.11.11;1.11.11 Besonderheiten der Konsole;118
3.1.11.12;1.11.12 Binäre Daten und Dateien;119
3.1.11.13;1.11.13 Formatierte Ausgabe;120
3.1.12;1.12 Verzeichnisse;129
3.1.13;1.13 Referenzen;132
3.1.13.1;1.13.1 Referenzen auf Variablen;133
3.1.13.2;1.13.2 Referenzen als Funktionsparameter und -rückgaben;140
3.1.13.3;1.13.3 Referenzen auf Funktionen;145
3.1.13.4;1.13.4 Referenzen auf Filehandles;146
3.1.13.5;1.13.5 Speicher und Speicherbereinigung;148
3.1.13.6;1.13.6 Autovivikation;149
3.1.14;1.14 Kommandozeilenparameter;149
3.1.14.1;1.14.1 Das Parameter-Array @ARGV;150
3.1.14.2;1.14.2 Kommandozeilen-Schalter;151
3.1.14.3;1.14.3 Die Funktion getopts();151
3.1.14.4;1.14.4 Die Funktion getopt();153
3.1.15;1.15 Ausblick auf Perl 6;153
3.1.15.1;1.15.1 Neuigkeiten bei Perl 6;154
3.1.15.2;1.15.2 Neue Sprachkonstrukte;155
3.1.15.3;1.15.3 Links;157
3.2;2 Fehlersuche in Programmen;158
3.2.1;2.1 Fehler suchen;158
3.2.2;2.2 Der Perl-Debugger;161
3.3;3 Stil und Dokumentation;168
3.3.1;3.1 Stilvorschläge für Perl-Programme;169
3.3.1.1;3.1.1 Allgemeines;169
3.3.1.2;3.1.2 Namen;170
3.3.1.3;3.1.3 Ausdrücke;170
3.3.1.4;3.1.4 Programmformat;171
3.3.2;3.2 Dokumentation;173
3.3.2.1;3.2.1 Allgemeines;173
3.3.2.2;3.2.2 POD-Überschriften;174
3.3.2.3;3.2.3 Listeneinträge;174
3.3.2.4;3.2.4 Texthervorhebungen;175
3.3.2.5;3.2.5 Spezielle Ausgabeformate;175
3.3.2.6;3.2.6 Erstellen einer Manual-Seite (Manpage);177
3.4;4 Komplexe Datenstrukturen;178
3.4.1;4.1 Anonyme Strukturen;179
3.4.2;4.2 Mehrdimensionale Arrays;183
3.4.3;4.3 Array von Hashes;187
3.4.4;4.4 Hash von Arrays;192
3.4.5;4.5 Hash von Hashes;194
3.4.6;4.6 Komplexe Datenstrukturen;196
3.4.7;4.7 Ausgabe mit Data::Dumper;200
3.4.8;4.8 Strukturen Kopieren und Speichern mit Storable;203
3.4.9;4.9 Hash-Slices;205
3.5;5 Externen Code ausführen;208
3.5.1;5.1 Externen Code mittels do() ausführen;209
3.5.2;5.2 Externen Code mit require() einbinden;210
3.5.3;5.3 Externen Code mit use() einbinden;211
3.6;6 Reguläre Ausdrücke;214
3.6.1;6.1 Die Basis;215
3.6.2;6.2 Operatoren für reguläre Ausdrücke;216
3.6.3;6.3 Der Transliterationsoperator tr;219
3.6.4;6.4 Anker und Zeichenklassen;221
3.6.5;6.5 Quantifizierer;226
3.6.6;6.6 Klammern und Rückbezüge;229
3.6.7;6.7 Modifizierer;231
3.6.8;6.8 Beliebige Begrenzer;235
3.6.9;6.9 Perl-Besonderheiten;238
3.6.10;6.10 Regex-Helfer;239
3.7;7 Arrays, grep, map etc.;242
3.7.1;7.1 Listen durchsuchen mit grep;243
3.7.2;7.2 Listen modifizieren mit map;245
3.7.3;7.3 map und sort;251
3.7.4;7.4 Arrays manipulieren mit splice;253
3.7.4.1;7.4.1 Array-Elemente entfernen;253
3.7.4.2;7.4.2 Array-Elemente ersetzen;254
3.7.4.3;7.4.3 Array-Elemente hinzufügen;254
3.7.5;7.5 Array-Slices;255
3.7.6;7.6 Das Modul List::Util;257
3.8;8 Programmkonfiguration;260
3.8.1;8.1 Konfiguration als Perl-Code;261
3.8.2;8.2 Konfigurationsdatei mit Key-Value-Paaren;262
3.9;9 Systeminformationen;268
3.9.1;9.1 Systemspezifische Variablen;269
3.9.2;9.2 Ausführen von Systemkommandos;270
3.9.3;9.3 Systemfunktionen;271
3.9.3.1;9.3.1 Die Funktionen setpwent, getpwent und endpwent;273
3.9.3.2;9.3.2 Die Funktionen setgrent, getgrent und endgrent;274
3.9.3.3;9.3.2 Die Funktionen getlogin, getpwuid und getpwnam;274
3.9.3.4;9.3.4 Die Funktionen getgrgid und getgrnam;275
3.9.3.5;9.3.5 Die Funktionen getpriority und setpriority;276
3.9.3.6;9.3.6 Die Funktion getppid;277
3.10;10 Prozesse und Signale;278
3.10.1;10.1 Prozesse;279
3.10.2;10.2 fork(), wait(), waitpid() und kill();281
3.10.3;10.3 Signale;286
3.10.3.1;10.3.1 kill(SIG, Prozess);287
3.10.3.2;10.3.2 Signalhandler;288
3.10.3.3;10.3.2 Die Alarm-Funktion;292
3.10.4;10.4 Prozesskommunikation;294
3.10.4.1;10.4.1 Pipes;294
3.10.4.2;10.4.2 Named Pipes;297
3.10.4.3;10.4.3 Prozesskommunikation mit open();299
3.10.4.4;10.4.4 System-V-IPC;300
3.10.4.5;10.4.5 Einen Dämon erzeugen;303
3.10.4.6;10.4.6 Benutzer- und Gruppen-ID ändern;307
3.11;11 Internationalisierung;310
3.11.1;11.1 Die locale-Kategorien;311
3.11.2;11.2 Zeichensätze und Codierung;312
3.11.3;11.3 locale und Programmierung;314
3.11.3.1;11.3.1 Konfiguration ändern und ausgeben;314
3.11.3.2;11.3.2 Funktionen für Zeichen;316
3.11.3.3;11.3.3 ISO 3166: Norm zur Länder-Codierung;317
3.11.3.4;11.3.4 ISO 4217: Norm für Währungsabkürzungen;318
4;Teil II: Packages, Module und Objekte;320
4.1;12 Packages;322
4.1.1;12.1 Namenskonflikte mit Packages auflösen;323
4.1.2;12.2 Lexikalische Gültigkeitsbereiche;326
4.1.3;12.3 Lokale Gültigkeitsbereiche;327
4.1.4;12.4 Globale Variablen;329
4.1.5;12.5 Typeglobs;330
4.2;13 Module;334
4.2.1;13.1 Perl-Module nutzen;336
4.2.1.1;13.1.1 Module finden;338
4.2.1.2;13.1.2 CPAN-Module installieren;340
4.2.2;13.2 Eigene Module bauen;342
4.2.3;13.3 Standardmodule;347
4.2.4;13.4 Pragmas des Perl-Interpreters;356
4.2.5;13.5 Modultests automatisieren;358
4.2.5.1;13.5.1 Dokumentation testen;360
4.2.5.2;13.5.2 Modultest;360
4.2.5.3;13.5.3 Test::Simple;361
4.2.5.4;13.5.4 Test::More;363
4.2.6;13.6 Ein eigenes Modul erstellen;369
4.2.6.1;13.6.1 Die Datei Makefile.PL;370
4.2.6.2;13.6.2 Die Datei README;371
4.2.6.3;13.6.3 Die Datei Changes;372
4.2.6.4;13.6.4 Die Datei MANIFEST;372
4.2.6.5;13.6.5 Testprogramme;373
4.2.6.6;13.6.6 Das Modul selbst;373
4.2.6.7;13.6.7 Das Modul testen;376
4.2.6.8;13.6.8 Das Modul packen;377
4.3;14 Objektorientiertes Perl;378
4.3.1;14.1 Grundlagen der OOP;379
4.3.1.1;14.1.1 Objekte und Klassen;379
4.3.1.2;14.1.2 Kapselung (Encapsulation);381
4.3.1.3;14.1.3 Vererbung (Inheritance);382
4.3.1.4;14.1.4 Polymorphie (Polymorphism);383
4.3.2;14.2 Klassen, Objekte und Methoden;384
4.3.2.1;14.2.1 Perl-OOP;386
4.3.2.2;14.2.2 Zugriff auf Methoden;388
4.3.2.3;14.2.3 Parameter des Konstruktors;390
4.3.2.4;14.2.4 Accessors;395
4.3.3;14.3 Vererbung;400
5;Teil III: Perl im Einsatz;412
5.1;15 Datum und Uhrzeit;414
5.1.1;15.1 Julianischer Tag;417
5.1.2;15.2 Osterdatum und bewegliche Feste;423
5.1.3;15.3 Das Modul Date::Calc;425
5.2;16 User-Interaktion;436
5.2.1;16.1 Erweiterte Kommandozeilenoptionen;437
5.2.2;16.2 Einfache Interaktion mit dem Benutzer;441
5.2.2.1;16.2.1 IO::Interactive;442
5.2.2.2;16.2.2 Term::Readkey;443
5.2.2.3;16.2.3 IO::Prompt;446
5.2.3;16.3 Textbildschirm mit Curses;451
5.2.3.1;16.3.1 Dokumentation;451
5.3;17 Textmanipulation;462
5.3.1;17.1 Programmierwerkzeuge;463
5.3.1.1;17.1.1 Crossreferenz;463
5.3.1.2;17.1.2 Hexdump;465
5.3.1.3;17.1.3 Dateinamen heilen;467
5.3.1.4;17.1.4 Passwort-Generator;469
5.3.1.5;17.1.5 Doubletten finden;471
5.3.2;17.2 Textersetzung in Dateien;473
5.3.2.1;17.2.1 Schnipp-Schnapp;473
5.3.2.2;17.2.2 Mehrfachersetzungen in einer Datei;474
5.3.3;17.3 Texte bearbeiten und konvertieren;476
5.3.3.1;17.3.1 Buchstabieren leicht gemacht;476
5.3.3.2;17.3.2 Silbentrennung;477
5.3.3.3;17.3.3 Stemmer;482
5.3.3.4;17.3.4 Das Soundex-Verfahren;487
5.3.3.5;17.3.5 Rhabarber, Rhabarber;488
5.3.3.6;17.3.6 Lorem ipsum;489
5.3.4;17.4 Verarbeitung von CSV- und Excel-Dateien;491
5.3.4.1;17.4.1 CSV-Dateien parsen;492
5.3.4.2;17.4.2 Excel-Dateien lesen;495
5.3.4.3;17.4.3 Excel-Dateien erzeugen;496
5.3.5;17.5 PDF-Dateien erzeugen;502
5.3.6;17.6 Makros und Templates;507
5.3.6.1;17.6.1 Ein Makroprozessor;507
5.3.6.2;17.6.2 Text-Templates (Schablonen);511
5.4;18 Grafik mit Perl;520
5.4.1;18.1 Grafik-Grundlagen;521
5.4.1.1;18.1.1 Einteilung nach Bildformat/Speicherung;521
5.4.1.2;18.1.2 Einteilung nach Farbe und Farbtiefe;522
5.4.1.3;18.1.3 Farbensehen beim Menschen;523
5.4.1.4;18.1.4 Farbmodelle;525
5.4.1.5;18.1.5 Das RGB-Modell;526
5.4.1.6;18.1.6 Das CMY-Modell;526
5.4.1.7;18.1.7 Gammakorrektur;527
5.4.1.8;18.1.8 Dithering;528
5.4.1.9;18.1.9 Bildkompressionsverfahren;529
5.4.1.10;18.1.10 Grafikformate;530
5.4.2;18.2 Grafiken erzeugen mit dem GD-Modul;532
5.4.2.1;18.2.1 Erzeugen und Speichern von Images;535
5.4.2.2;18.2.2 Farben zuordnen;536
5.4.2.3;18.2.3 Grundfunktionen zum Zeichnen;539
5.4.2.4;18.2.4 Text im Bild ausgeben;545
5.4.2.5;18.2.5 Polygone zeichnen;547
5.4.2.6;18.2.6 Flächen füllen;553
5.4.2.7;18.2.7 Spezielle Farbmuster;554
5.4.2.8;18.2.6 Bilder oder Bildausschnitte kopieren;556
5.4.3;18.3 Koordinatensysteme;561
5.4.4;18.4 Informationen über Bilder;565
5.4.4.1;18.4.1 Bildgröße ermitteln;565
5.4.4.2;18.4.2 Bilddaten;566
5.4.4.3;18.4.3 Screenshots anfertigen;567
5.4.5;18.5 Das Chart-Paket;568
5.4.6;18.6 Das Modul GraphViz;572
5.4.6.1;18.6.1 Installation;572
5.4.6.2;18.6.2 Attribute von new();574
5.4.6.3;18.6.3 Attribute für Knoten und Kanten;576
5.4.6.4;18.6.4 GraphViz-Tools;583
5.4.7;18.7 Strichcode mit GD erzeugen;584
5.4.8;18.8 Bildbearbeitung mit PerlMagick;587
5.4.8.1;18.8.1 Die ImageMagick-Programme;587
5.4.8.2;18.8.2 PerlMagick = Image::Magick;594
5.5;19 Die TK-Benutzerschnittstelle;618
5.5.1;19.1 Ereignisgesteuerte Programme;619
5.5.2;19.2 Einführung in Perl/Tk;620
5.5.3;19.3 Widget-Optionen;623
5.5.4;Geometriemanager;629
5.5.4.1;Der Geometriemanager grid;629
5.5.4.2;Der Geometriemanager place;634
5.5.4.3;Der Geometriemanager pack;638
5.5.5;Frame- und Toplevel-Widgets;643
5.5.5.1;Das Widget frame;644
5.5.5.2;Das Toplevel-Widget;646
5.5.6;Die Perl/Tk-Widgets;647
5.5.6.1;Das Button-Widget;648
5.5.6.2;Das Label-Widget;650
5.5.6.3;Exkurs: Schriftarten (Fonts) bei X11;652
5.5.6.4;Das Entry-Widget;656
5.5.6.5;Das Messagebox-Widget;658
5.5.6.6;Das Dialog-Widget;660
5.5.6.7;Das Checkbutton-Widget;663
5.5.6.8;Das Radiobutton-Widget;664
5.5.6.9;Das Listbox-Widget;667
5.5.6.10;Die Widgets Scrollbar, Scrolled und Scale;670
5.5.6.11;Grafik mit dem Canvas-Widget;677
5.5.6.12;Das Text-Widget;684
5.5.6.13;Menüs erzeugen mit Menu und Menubutton;688
5.5.6.14;Das Notebook-Widget;693
5.5.6.15;Ein Fortschrittsbalken-Widget;695
5.5.7;Maus und Tasten an Aktionen/Widgets binden;699
5.6;20 MySQL-Datenbanken;710
5.6.1;20.1 Einführung in Datenbanken;711
5.6.1.1;20.1.1 Datenbankentwurf;715
5.6.1.2;20.1.2 Elementare Datentypen;721
5.6.1.3;20.1.3 Relationale Operationen;722
5.6.2;20.2 Die Sprache SQL;726
5.6.3;20.3 MySQL;730
5.6.3.1;20.3.1 Installation und Inbetriebnahme;730
5.6.3.2;20.3.2 MySQL-Datentypen;734
5.6.3.3;20.3.3 Datenbankabfrage mit SELECT;740
5.6.3.4;20.3.4 Joins – Abfragen mit SELECT;748
5.6.3.5;20.3.5 Zeichenkettenoperationen;755
5.6.3.6;20.3.6 Datums- und Zeitfunktionen;756
5.6.3.7;20.3.7 Bedingte Anweisungen;757
5.6.3.8;20.3.8 Tabellen importieren oder clonen;757
5.6.3.9;20.3.9 Datensätze ändern oder löschen;760
5.6.3.10;20.3.10 Felder einer Tabelle ändern;761
5.6.3.11;20.3.11 Datenbank sichern;763
5.6.4;20.4 Die Perl-DBI-Schnittstelle;764
5.6.4.1;20.4.1 Verbindung zur Datenbank öffnen;765
5.6.4.2;20.4.2 Allgemeine Funktionen;768
5.6.4.3;20.4.3 Übergabe von User, Passwort und Datenbank;769
5.6.4.4;20.4.4 Metadaten zur Datenbank ermitteln;770
5.6.4.5;20.4.5 MySQL-Tabellen anlegen;772
5.6.4.6;20.4.6 Zugriff auf die Datensätze;773
5.6.4.7;20.4.7 MySQL-Spezialfunktionen und Fehlerbehandlung;782
5.6.4.8;20.4.8 Bilder abspeichern und anzeigen;784
5.6.4.9;20.4.9 Anwendungsbeispiel: IP-Adresse dem Land zuordnen;786
5.6.4.10;20.4.10 SQL-Injection;791
5.7;21 Netzwerkprogrammierung;794
5.7.1;21.1 Socketprogrammierung;795
5.7.1.1;21.1.1 Die Socket-Netzwerkschnittstelle;795
5.7.1.2;21.1.2 Die Socket-Funktionen des Betriebssystems;800
5.7.1.3;21.1.3 Der erste Perl-Server und -Client;804
5.7.2;21.2 Netzwerkfunktionen in Perl;806
5.7.2.1;21.2.1 IP-Adressen;806
5.7.2.2;21.2.2 Informationsfunktionen;807
5.7.3;21.3 Die Socket-Schnittstelle IO::Socket::INET;813
5.7.3.1;21.3.1 Der Konstruktor new;813
5.7.3.2;21.3.2 Aktive Methoden;814
5.7.3.3;21.3.3 Informationsmethoden;815
5.7.3.4;21.3.4 Gepufferte Ein- und Ausgabe;816
5.7.4;21.4 Namensauflösung;816
5.7.5;21.5 Server und Client in Perl;818
5.7.6;21.6 Forking Server in Perl;821
5.7.7;21.7 Server für bestimmte Dienste;824
5.7.7.1;21.7.1 Sprüche-Server;825
5.7.7.2;21.7.2 Keks-Server;826
5.7.7.3;21.7.3 Server für HTTP;827
5.7.7.4;21.7.4 Preforking;839
5.7.7.5;21.7.5 Serverdienste über inetd;840
5.7.7.6;21.7.6 Protokollierung;842
5.7.7.7;21.7.7 Timeouts abfangen;844
5.7.8;21.8 Perl-Clients für Standarddienste;844
5.7.8.1;21.8.1 Client für Binärdaten;844
5.7.8.2;21.8.2 Webclients;846
5.7.8.3;21.8.3 FTP-Clients;860
5.7.9;21.9 Portscanner;863
5.7.10;21.10 Ping;864
5.7.11;21.11 Rechner im Netz suchen;867
5.7.12;21.12 Spezielle Netzwerkanwendungen;870
5.7.12.1;21.2.1 Aktienkurse auslesen;870
5.7.12.2;21.12.2 Comics herunterladen;873
5.7.12.3;21.12.3 Wake-On-LAN;877
5.7.12.4;21.12.4 Ein Protokoll entwerfen;880
5.7.12.5;21.12.5 Webcams auslesen;886
5.7.12.6;21.12.6 Steuern über das Netz;891
5.8;22 E-Mail;902
5.8.1;22.1 E-Mail-Grundlagen;903
5.8.1.1;22.1.1 Ein Blick auf den Briefkopf;904
5.8.1.2;22.1.2 Mailing-Listen;905
5.8.1.3;22.1.3 Was ist MIME?;906
5.8.1.4;22.1.4 POP -- Post Office Protocol;908
5.8.1.5;22.1.5 IMAP -- Internet Message Access Protocol;911
5.8.1.6;22.1.6 Der Mail Transport Agent;912
5.8.2;22.2 E-Mail versenden mit Perl;915
5.8.2.1;22.2.1 Mailversand mit Sendmail;915
5.8.2.2;22.2.2 Mailversand mit Netzwerkfunktionen;916
5.8.2.3;22.2.3 Mailversand mit Net::SMTP;918
5.8.2.4;22.2.4 Ein Mini-MTA;921
5.8.3;22.3 E-Mail mit Attachmentversenden;922
5.8.4;22.4 MIME-Mails verarbeiten;928
5.8.4.1;22.4.1 Das Modul MIME::Parser;928
5.8.4.2;22.4.2 Der Mail-Analysator;936
5.8.4.3;22.4.3 Die Dateien aliases und .forward;940
5.8.5;22.5 E-Mail vom Mailserver holen;942
5.8.5.1;22.5.1 E-Mail per POP3 holen;942
5.8.5.2;22.5.2 E-Mail per IMAP holen;945
5.9;23 CGI und HTML;952
5.9.1;23.1 Das Hypertext Transfer Protocol;954
5.9.1.1;23.1.1 Struktur der HTTP-Botschaften;955
5.9.1.2;23.1.2 Antwortcodes eines WWW-Servers;957
5.9.2;23.2 Common Gateway Interface (CGI);958
5.9.2.1;23.2.1 Daten empfangen;960
5.9.2.2;23.2.2 Dem Browser eine Antwort geben;962
5.9.2.3;23.2.3 Sicherheit und CGI-Programme;964
5.9.2.4;23.2.4 Wenn das CGI-Programm nicht läuft;969
5.9.2.5;23.2.5 HTML-Formulare;970
5.9.2.6;23.2.6 CGI-Programme und die Webseite;977
5.9.3;23.3 CGI-Programmierung;980
5.9.3.1;23.3.1 Ablauf eines CGI-Programms;980
5.9.3.2;23.3.2 Decodierung der übergebenen Daten;981
5.9.3.3;23.3.3 Fehlerbehandlung im Browser;992
5.9.3.4;23.3.4 Ein Blick auf den HTTP-Header;994
5.9.3.5;23.3.5 Formulare generieren;996
5.9.3.6;23.3.6 Binärinformation zurückgeben;1002
5.9.3.7;23.3.7 Einige einfache Anwendungen;1008
5.9.4;23.4 Das CGI-Modul;1026
5.9.4.1;23.4.1 Erzeugung eines neuen CGI-Query-Objekts;1030
5.9.4.2;23.4.2 Formularparameter bearbeiten;1031
5.9.4.3;23.4.3 CGI-Modul und HTTP-Header;1033
5.9.4.4;23.4.4 HTML-Header und -Footer;1036
5.9.4.5;23.4.5 Erzeugung von Formularen;1037
5.9.4.6;23.4.6 Standard-HTML-Elemente erzeugen;1043
5.9.4.7;23.4.7 Die funktionsorientierte Schnittstelle;1044
5.9.4.8;23.4.8 Debugging-Tips;1046
5.9.5;23.5 Datei-Upload per Formular;1048
5.9.6;23.6 Session-Tracking;1051
5.9.6.1;23.6.1 Zustandsspeicherung über PATH_INFO;1053
5.9.6.2;23.6.2 Zustandsspeicherung per URL-Encoding;1054
5.9.6.3;23.6.3 Zustandsspeicherung über Hidden-Felder;1055
5.9.6.4;23.6.4 Zustandsspeicherung über Cookies;1056
5.9.7;23.7 Datenbankzugriffe in CGI-Programmen;1068
5.9.8;23.8 Captchas;1071
5.9.9;23.9 Fehler im Webserver-Log suchen;1078
5.9.10;23.10 Webseiten lokal zum Browser schicken;1080
5.10;24 Suchen und Finden;1082
5.10.1;24.1 Eine kleine lokale Suchmaschine;1085
5.10.2;24.2 Dateien indizieren;1090
5.10.2.1;24.2.1 Konfiguration des Indexers;1092
5.10.2.2;24.2.2 Texte indizieren;1095
5.10.2.3;24.2.3 Ein Volltextindex auf Dateibasis;1102
5.10.2.4;24.2.4 Ein Volltextindex mit MySQL;1105
5.10.3;24.3 Mit Swish-E Webseiten indizieren;1111
5.10.4;24.4 Links überprüfen;1120
5.11;25 Numerik und Statistik;1124
5.11.1;25.1 Mathematikmodule;1125
5.11.1.1;25.1.1 Große Ganzzahlen;1125
5.11.1.2;25.1.2 Große Gleitkommazahlen;1128
5.11.1.3;25.1.3 Komplexe Zahlen;1130
5.11.1.4;25.1.4 Trigonometrische Funktionen;1132
5.11.2;25.2 Deskriptive Statistik;1137
5.11.2.1;25.2.1 Tabellarische und grafische Darstellung;1137
5.11.2.2;25.2.2 Mittelwert, Varianz, Standardabweichung, Standardfehler;1138
5.11.2.3;25.2.3 Minimum, Maximum, Median, Modalwert;1140
5.11.2.4;25.2.4 Lineare Regression;1142
5.11.3;25.3 Geometrie: Polygonumfang und -Fläche;1144
5.11.4;25.4 Nullstellen von Gleichungen;1146
5.11.5;25.5 Numerische Integration;1151
5.11.6;25.6 Permutationen;1153
5.12;26 Perl und die Hardware;1154
5.12.1;26.1 You must be root …;1155
5.12.2;26.2 Die parallele Schnittstelle;1156
5.12.2.1;26.2.1 Parallele Grundlagen;1157
5.12.2.2;26.2.2 Programmierung der parallelen Schnittstelle;1160
5.12.3;26.3 Die serielle Schnittstelle;1164
5.12.3.1;26.3.1 Serielle Grundlagen;1164
5.12.3.2;26.3.2 Programmierung mit Perl;1168
5.12.3.3;26.3.3 Steuer- und Statusleitungen, Meldungen, Einstellungen;1175
5.12.3.4;26.3.4 Serielle Ein- und Ausgabe, Timeouts;1182
5.12.3.5;26.3.5 Betrieb mit Modems etc.;1189
5.12.3.6;26.3.6 Messwerterfassung über die serielle Schnittstelle;1195
5.12.4;26.4 Die USB-Schnittstelle;1203
5.12.4.1;26.4.1 Informationen über den USB einholen;1204
5.12.4.2;26.4.2 USB über die libusb ansteuern;1211
6;Literatur;1218
7;Index;1220


12 Packages (S. 321-322)

Sie haben einige Funktionen geschrieben, um beispielsweise Daten einer Datenbank als HTML-Tabelle auszugeben. Weil Sie diese Funktionen öfter brauchen, stehen sie in einer eigenen Datei und werden als Modul ins aktuelle Programm eingebunden wie es in Kapitel 5 auf den Seiten 207ff beschrieben wurde. Im Programm selbst findet sich nun unglücklicherweise eine Funktion mit dem gleichen Namen wie eine Funktion in der externen Datei. Das Problem: Es gibt zwei verschiedene Funktionen mit dem gleichen Namen, was eher suboptimal ist. Wenn Sie sich jetzt vorstellen, dass mehrere Programmierer an einen Gesamtsystem arbeiten, sind solche Doubletten häufig die Regel.

Sie erinnern sich noch an Teil 1? Der Gültigkeitsbereich einer Variablen bezieht sich darauf, in welchen Bereichen eines Programms man auf eine Variable oder Funktion zugreifen kann. Von einem globalen Gültigkeitsbereich spricht man, wenn eine Variable im gesamten Programm verfügbar ist und so lange existiert, wie dieses ausgeführt wird. Von einem lokalen Gültigkeitsbereich spricht man hingegen, wenn eine Variable nur begrenzt gültig ist, z. B. nur innerhalb einer Funktion.

Die beste Möglichkeit, Namenskonflikte durch globale Variablen zu umgehen, besteht im Verzicht auf globale Variablen. Unterprogramme haben durchweg lokale Variablen, Werte werden gegebenenfalls über Parameter weitergereicht. Manche Softwareentwickler glauben, dies sei die Lösung aller Probleme, und das Vermeiden von globalen Variablen entspräche professionellem Softwaredesign. In der Realität werden globale Variablen aber eingesetzt. Solange man das nicht übertreibt, ist das auch durchaus in Ordnung.

12.1 Namenskonflikte mit Packages auflösen

Perl stellt mit seinen Packages (Pakete) einen Mechanismus zur Verfügung, der die Definition verschiedener, sich nicht überlappender Namensbereiche ermöglicht. Dies ist die Grundlage für die Verwendung von Perl-Bibliotheken und für die Entwicklung größerer Programmsysteme (Modularisierung). Außer einer handvoll spezieller Variablen gibt es in Perl im Prinzip keine globalen Variablen, da jede Variable automatisch dem (implizit immer vorhandenen) Package main zugeordnet ist. Mit der package-Anweisung wählt der Programmierer den gewünschten Namensraum für seine Variablen und Funktionen aus. Der Gültigkeitsbereich einer package-Anweisung beginnt bei dieser Anweisung und endet am Ende des umgebenden Blockes. Variablen eines anderen Packages können unter Angaben des Package-Namens mit folgender Notation referenziert werden:

$Packagename::Variable

Bei Perl 4 war noch die Notation $Packagename’Variable möglich, die man heute nicht mehr einsetzen sollte. Die package-Anweisung wird häufig an den Anfang einer Datei gesetzt, die ein anderes Programm dann mittels require-Anweisung einbindet. Das Prinzip der Packages besteht darin, dass für jedes Paket ein eigener Satz von Variablennamen existiert, der bestimmt, ob eine Variable für Perl verfügbar ist und wie der aktuelle Wert der Variablen lautet. Dies nennt sich „Symboltabelle“. Sie enthält alle Namen, die Sie möglicherweise in Ihrem Programm verwenden: Skalare, Arrays, Hashes und Funktionen.


Prof. Jürgen Plate unterrichtet an der Fakultät Elektrotechnik und Informationstechnik der FH München. Seine Fachgebiete umfassen neben anderen die Mikrocomputer-Technik, Computernetze, Internet-Technologie und die Anwendung und Administration von Linux. Seit vielen, vielen Jahre ist er begeisterter Perl-User.


Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.