Der Perl Programmierer (eBook)
1234 Seiten
Carl Hanser Fachbuchverlag
978-3-446-42449-4 (ISBN)
Der Perl-Alleskönner
Dieses 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.
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.
Inhalt 6
Vorwort 22
Teil I: Grundlagen 26
1 Programmierung mit Perl 28
1.1 Erste Schritte 28
1.1.1 Ein Programm ausführen 31
1.1.2 Aufruf 32
1.1.3 Dokumentation 33
1.2 Sprachkontext 33
1.3 Variablen 34
1.3.1 Datentypen des Perl-Interpreters 34
1.3.2 Skalare Variablen 35
1.3.2 Vordefinierte Skalare 36
1.4 Operationen und Zuweisungen 38
1.4.1 Vergleichsoperatoren 39
1.4.2 Logische Operatoren und Bitmaipulation 40
1.4.3 Operatorenrangfolge 43
1.4.4 Zufallszahlen 45
1.4.5 Vordefinierte Skalarvariablen 47
1.4.6 Pragmas des Perl-Interpreters 48
1.5 Listen und Arrays 49
1.5.1 Unterschiede und Gemeinsamkeiten von Listen und Arrays 50
1.5.2 Array-Funktionen von Perl 54
1.6 Hashes 55
1.7 Kontrollstrukturen 61
1.7.1 Bedingte Anweisungen 62
1.7.2 Schleifenkonstrukte 64
1.7.3 Sprungbefehle 66
1.7.4 Verkürzte Strukturen 67
1.7.5 do-Blöcke 68
1.7.6 Switch-Struktur 68
1.7.7 goto-Anweisung 70
1.8 Unterprogramme 70
1.8.1 Parameterübergabe 72
1.8.2 Klammern oder keine Klammern? 76
1.8.2 Lebensdauer von Objekten 78
1.8.4 Default-Parameter 81
1.8.5 Vordefinierte Funktionen für Zeichenketten 82
1.8.6 Die Sortierfunktion 85
1.8.7 Vordefinierte Mathematikfunktionen 88
1.8.8 Ausführen von Systemkommandos 90
1.8.9 Die eval-Funktion 92
1.8.10 Funktionen für Datum und Uhrzeit 93
1.8.11 Aufrufkontext ermitteln 95
1.9 Besondere Unterprogramme: Blöcke 96
1.10 Rekursion und Iteration 98
1.11 Dateien 103
1.11.1 Dateien öffnen 104
1.11.2 Dateien schließen 106
1.11.3 Lesender Zugriff 107
1.11.4 Schreibender Zugriff 109
1.11.5 Ein- und Ausgabe mit Pipes 111
1.11.6 Dateien zum Lesen und Schreiben öffnen 112
1.11.7 Sperren des Dateizugriffes für andere Benutzer 114
1.11.8 Dateifunktionen 114
1.11.9 Dateitestoperatoren und Dateiinformationen 116
1.11.10 Das DATA-Filehandle 117
1.11.11 Besonderheiten der Konsole 118
1.11.12 Binäre Daten und Dateien 119
1.11.13 Formatierte Ausgabe 120
1.12 Verzeichnisse 129
1.13 Referenzen 132
1.13.1 Referenzen auf Variablen 133
1.13.2 Referenzen als Funktionsparameter und -rückgaben 140
1.13.3 Referenzen auf Funktionen 145
1.13.4 Referenzen auf Filehandles 146
1.13.5 Speicher und Speicherbereinigung 148
1.13.6 Autovivikation 149
1.14 Kommandozeilenparameter 149
1.14.1 Das Parameter-Array @ARGV 150
1.14.2 Kommandozeilen-Schalter 151
1.14.3 Die Funktion getopts() 151
1.14.4 Die Funktion getopt() 153
1.15 Ausblick auf Perl 6 153
1.15.1 Neuigkeiten bei Perl 6 154
1.15.2 Neue Sprachkonstrukte 155
1.15.3 Links 157
2 Fehlersuche in Programmen 158
2.1 Fehler suchen 158
2.2 Der Perl-Debugger 161
3 Stil und Dokumentation 168
3.1 Stilvorschläge für Perl-Programme 169
3.1.1 Allgemeines 169
3.1.2 Namen 170
3.1.3 Ausdrücke 170
3.1.4 Programmformat 171
3.2 Dokumentation 173
3.2.1 Allgemeines 173
3.2.2 POD-Überschriften 174
3.2.3 Listeneinträge 174
3.2.4 Texthervorhebungen 175
3.2.5 Spezielle Ausgabeformate 175
3.2.6 Erstellen einer Manual-Seite (Manpage) 177
4 Komplexe Datenstrukturen 178
4.1 Anonyme Strukturen 179
4.2 Mehrdimensionale Arrays 183
4.3 Array von Hashes 187
4.4 Hash von Arrays 192
4.5 Hash von Hashes 194
4.6 Komplexe Datenstrukturen 196
4.7 Ausgabe mit Data::Dumper 200
4.8 Strukturen Kopieren und Speichern mit Storable 203
4.9 Hash-Slices 205
5 Externen Code ausführen 208
5.1 Externen Code mittels do() ausführen 209
5.2 Externen Code mit require() einbinden 210
5.3 Externen Code mit use() einbinden 211
6 Reguläre Ausdrücke 214
6.1 Die Basis 215
6.2 Operatoren für reguläre Ausdrücke 216
6.3 Der Transliterationsoperator tr 219
6.4 Anker und Zeichenklassen 221
6.5 Quantifizierer 226
6.6 Klammern und Rückbezüge 229
6.7 Modifizierer 231
6.8 Beliebige Begrenzer 235
6.9 Perl-Besonderheiten 238
6.10 Regex-Helfer 239
7 Arrays, grep, map etc. 242
7.1 Listen durchsuchen mit grep 243
7.2 Listen modifizieren mit map 245
7.3 map und sort 251
7.4 Arrays manipulieren mit splice 253
7.4.1 Array-Elemente entfernen 253
7.4.2 Array-Elemente ersetzen 254
7.4.3 Array-Elemente hinzufügen 254
7.5 Array-Slices 255
7.6 Das Modul List::Util 257
8 Programmkonfiguration 260
8.1 Konfiguration als Perl-Code 261
8.2 Konfigurationsdatei mit Key-Value-Paaren 262
9 Systeminformationen 268
9.1 Systemspezifische Variablen 269
9.2 Ausführen von Systemkommandos 270
9.3 Systemfunktionen 271
9.3.1 Die Funktionen setpwent, getpwent und endpwent 273
9.3.2 Die Funktionen setgrent, getgrent und endgrent 274
9.3.2 Die Funktionen getlogin, getpwuid und getpwnam 274
9.3.4 Die Funktionen getgrgid und getgrnam 275
9.3.5 Die Funktionen getpriority und setpriority 276
9.3.6 Die Funktion getppid 277
10 Prozesse und Signale 278
10.1 Prozesse 279
10.2 fork(), wait(), waitpid() und kill() 281
10.3 Signale 286
10.3.1 kill(SIG, Prozess) 287
10.3.2 Signalhandler 288
10.3.2 Die Alarm-Funktion 292
10.4 Prozesskommunikation 294
10.4.1 Pipes 294
10.4.2 Named Pipes 297
10.4.3 Prozesskommunikation mit open() 299
10.4.4 System-V-IPC 300
10.4.5 Einen Dämon erzeugen 303
10.4.6 Benutzer- und Gruppen-ID ändern 307
11 Internationalisierung 310
11.1 Die locale-Kategorien 311
11.2 Zeichensätze und Codierung 312
11.3 locale und Programmierung 314
11.3.1 Konfiguration ändern und ausgeben 314
11.3.2 Funktionen für Zeichen 316
11.3.3 ISO 3166: Norm zur Länder-Codierung 317
11.3.4 ISO 4217: Norm für Währungsabkürzungen 318
Teil II: Packages, Module und Objekte 320
12 Packages 322
12.1 Namenskonflikte mit Packages auflösen 323
12.2 Lexikalische Gültigkeitsbereiche 326
12.3 Lokale Gültigkeitsbereiche 327
12.4 Globale Variablen 329
12.5 Typeglobs 330
13 Module 334
13.1 Perl-Module nutzen 336
13.1.1 Module finden 338
13.1.2 CPAN-Module installieren 340
13.2 Eigene Module bauen 342
13.3 Standardmodule 347
13.4 Pragmas des Perl-Interpreters 356
13.5 Modultests automatisieren 358
13.5.1 Dokumentation testen 360
13.5.2 Modultest 360
13.5.3 Test::Simple 361
13.5.4 Test::More 363
13.6 Ein eigenes Modul erstellen 369
13.6.1 Die Datei Makefile.PL 370
13.6.2 Die Datei README 371
13.6.3 Die Datei Changes 372
13.6.4 Die Datei MANIFEST 372
13.6.5 Testprogramme 373
13.6.6 Das Modul selbst 373
13.6.7 Das Modul testen 376
13.6.8 Das Modul packen 377
14 Objektorientiertes Perl 378
14.1 Grundlagen der OOP 379
14.1.1 Objekte und Klassen 379
14.1.2 Kapselung (Encapsulation) 381
14.1.3 Vererbung (Inheritance) 382
14.1.4 Polymorphie (Polymorphism) 383
14.2 Klassen, Objekte und Methoden 384
14.2.1 Perl-OOP 386
14.2.2 Zugriff auf Methoden 388
14.2.3 Parameter des Konstruktors 390
14.2.4 Accessors 395
14.3 Vererbung 400
Teil III: Perl im Einsatz 412
15 Datum und Uhrzeit 414
15.1 Julianischer Tag 417
15.2 Osterdatum und bewegliche Feste 423
15.3 Das Modul Date::Calc 425
16 User-Interaktion 436
16.1 Erweiterte Kommandozeilenoptionen 437
16.2 Einfache Interaktion mit dem Benutzer 441
16.2.1 IO::Interactive 442
16.2.2 Term::Readkey 443
16.2.3 IO::Prompt 446
16.3 Textbildschirm mit Curses 451
16.3.1 Dokumentation 451
17 Textmanipulation 462
17.1 Programmierwerkzeuge 463
17.1.1 Crossreferenz 463
17.1.2 Hexdump 465
17.1.3 Dateinamen heilen 467
17.1.4 Passwort-Generator 469
17.1.5 Doubletten finden 471
17.2 Textersetzung in Dateien 473
17.2.1 Schnipp-Schnapp 473
17.2.2 Mehrfachersetzungen in einer Datei 474
17.3 Texte bearbeiten und konvertieren 476
17.3.1 Buchstabieren leicht gemacht 476
17.3.2 Silbentrennung 477
17.3.3 Stemmer 482
17.3.4 Das Soundex-Verfahren 487
17.3.5 Rhabarber, Rhabarber 488
17.3.6 Lorem ipsum 489
17.4 Verarbeitung von CSV- und Excel-Dateien 491
17.4.1 CSV-Dateien parsen 492
17.4.2 Excel-Dateien lesen 495
17.4.3 Excel-Dateien erzeugen 496
17.5 PDF-Dateien erzeugen 502
17.6 Makros und Templates 507
17.6.1 Ein Makroprozessor 507
17.6.2 Text-Templates (Schablonen) 511
18 Grafik mit Perl 520
18.1 Grafik-Grundlagen 521
18.1.1 Einteilung nach Bildformat/Speicherung 521
18.1.2 Einteilung nach Farbe und Farbtiefe 522
18.1.3 Farbensehen beim Menschen 523
18.1.4 Farbmodelle 525
18.1.5 Das RGB-Modell 526
18.1.6 Das CMY-Modell 526
18.1.7 Gammakorrektur 527
18.1.8 Dithering 528
18.1.9 Bildkompressionsverfahren 529
18.1.10 Grafikformate 530
18.2 Grafiken erzeugen mit dem GD-Modul 532
18.2.1 Erzeugen und Speichern von Images 535
18.2.2 Farben zuordnen 536
18.2.3 Grundfunktionen zum Zeichnen 539
18.2.4 Text im Bild ausgeben 545
18.2.5 Polygone zeichnen 547
18.2.6 Flächen füllen 553
18.2.7 Spezielle Farbmuster 554
18.2.6 Bilder oder Bildausschnitte kopieren 556
18.3 Koordinatensysteme 561
18.4 Informationen über Bilder 565
18.4.1 Bildgröße ermitteln 565
18.4.2 Bilddaten 566
18.4.3 Screenshots anfertigen 567
18.5 Das Chart-Paket 568
18.6 Das Modul GraphViz 572
18.6.1 Installation 572
18.6.2 Attribute von new() 574
18.6.3 Attribute für Knoten und Kanten 576
18.6.4 GraphViz-Tools 583
18.7 Strichcode mit GD erzeugen 584
18.8 Bildbearbeitung mit PerlMagick 587
18.8.1 Die ImageMagick-Programme 587
18.8.2 PerlMagick = Image::Magick 594
19 Die TK-Benutzerschnittstelle 618
19.1 Ereignisgesteuerte Programme 619
19.2 Einführung in Perl/Tk 620
19.3 Widget-Optionen 623
Geometriemanager 629
Der Geometriemanager grid 629
Der Geometriemanager place 634
Der Geometriemanager pack 638
Frame- und Toplevel-Widgets 643
Das Widget frame 644
Das Toplevel-Widget 646
Die Perl/Tk-Widgets 647
Das Button-Widget 648
Das Label-Widget 650
Exkurs: Schriftarten (Fonts) bei X11 652
Das Entry-Widget 656
Das Messagebox-Widget 658
Das Dialog-Widget 660
Das Checkbutton-Widget 663
Das Radiobutton-Widget 664
Das Listbox-Widget 667
Die Widgets Scrollbar, Scrolled und Scale 670
Grafik mit dem Canvas-Widget 677
Das Text-Widget 684
Menüs erzeugen mit Menu und Menubutton 688
Das Notebook-Widget 693
Ein Fortschrittsbalken-Widget 695
Maus und Tasten an Aktionen/Widgets binden 699
20 MySQL-Datenbanken 710
20.1 Einführung in Datenbanken 711
20.1.1 Datenbankentwurf 715
20.1.2 Elementare Datentypen 721
20.1.3 Relationale Operationen 722
20.2 Die Sprache SQL 726
20.3 MySQL 730
20.3.1 Installation und Inbetriebnahme 730
20.3.2 MySQL-Datentypen 734
20.3.3 Datenbankabfrage mit SELECT 740
20.3.4 Joins – Abfragen mit SELECT 748
20.3.5 Zeichenkettenoperationen 755
20.3.6 Datums- und Zeitfunktionen 756
20.3.7 Bedingte Anweisungen 757
20.3.8 Tabellen importieren oder clonen 757
20.3.9 Datensätze ändern oder löschen 760
20.3.10 Felder einer Tabelle ändern 761
20.3.11 Datenbank sichern 763
20.4 Die Perl-DBI-Schnittstelle 764
20.4.1 Verbindung zur Datenbank öffnen 765
20.4.2 Allgemeine Funktionen 768
20.4.3 Übergabe von User, Passwort und Datenbank 769
20.4.4 Metadaten zur Datenbank ermitteln 770
20.4.5 MySQL-Tabellen anlegen 772
20.4.6 Zugriff auf die Datensätze 773
20.4.7 MySQL-Spezialfunktionen und Fehlerbehandlung 782
20.4.8 Bilder abspeichern und anzeigen 784
20.4.9 Anwendungsbeispiel: IP-Adresse dem Land zuordnen 786
20.4.10 SQL-Injection 791
21 Netzwerkprogrammierung 794
21.1 Socketprogrammierung 795
21.1.1 Die Socket-Netzwerkschnittstelle 795
21.1.2 Die Socket-Funktionen des Betriebssystems 800
21.1.3 Der erste Perl-Server und -Client 804
21.2 Netzwerkfunktionen in Perl 806
21.2.1 IP-Adressen 806
21.2.2 Informationsfunktionen 807
21.3 Die Socket-Schnittstelle IO::Socket::INET 813
21.3.1 Der Konstruktor new 813
21.3.2 Aktive Methoden 814
21.3.3 Informationsmethoden 815
21.3.4 Gepufferte Ein- und Ausgabe 816
21.4 Namensauflösung 816
21.5 Server und Client in Perl 818
21.6 Forking Server in Perl 821
21.7 Server für bestimmte Dienste 824
21.7.1 Sprüche-Server 825
21.7.2 Keks-Server 826
21.7.3 Server für HTTP 827
21.7.4 Preforking 839
21.7.5 Serverdienste über inetd 840
21.7.6 Protokollierung 842
21.7.7 Timeouts abfangen 844
21.8 Perl-Clients für Standarddienste 844
21.8.1 Client für Binärdaten 844
21.8.2 Webclients 846
21.8.3 FTP-Clients 860
21.9 Portscanner 863
21.10 Ping 864
21.11 Rechner im Netz suchen 867
21.12 Spezielle Netzwerkanwendungen 870
21.2.1 Aktienkurse auslesen 870
21.12.2 Comics herunterladen 873
21.12.3 Wake-On-LAN 877
21.12.4 Ein Protokoll entwerfen 880
21.12.5 Webcams auslesen 886
21.12.6 Steuern über das Netz 891
22 E-Mail 902
22.1 E-Mail-Grundlagen 903
22.1.1 Ein Blick auf den Briefkopf 904
22.1.2 Mailing-Listen 905
22.1.3 Was ist MIME? 906
22.1.4 POP -- Post Office Protocol 908
22.1.5 IMAP -- Internet Message Access Protocol 911
22.1.6 Der Mail Transport Agent 912
22.2 E-Mail versenden mit Perl 915
22.2.1 Mailversand mit Sendmail 915
22.2.2 Mailversand mit Netzwerkfunktionen 916
22.2.3 Mailversand mit Net::SMTP 918
22.2.4 Ein Mini-MTA 921
22.3 E-Mail mit Attachmentversenden 922
22.4 MIME-Mails verarbeiten 928
22.4.1 Das Modul MIME::Parser 928
22.4.2 Der Mail-Analysator 936
22.4.3 Die Dateien aliases und .forward 940
22.5 E-Mail vom Mailserver holen 942
22.5.1 E-Mail per POP3 holen 942
22.5.2 E-Mail per IMAP holen 945
23 CGI und HTML 952
23.1 Das Hypertext Transfer Protocol 954
23.1.1 Struktur der HTTP-Botschaften 955
23.1.2 Antwortcodes eines WWW-Servers 957
23.2 Common Gateway Interface (CGI) 958
23.2.1 Daten empfangen 960
23.2.2 Dem Browser eine Antwort geben 962
23.2.3 Sicherheit und CGI-Programme 964
23.2.4 Wenn das CGI-Programm nicht läuft 969
23.2.5 HTML-Formulare 970
23.2.6 CGI-Programme und die Webseite 977
23.3 CGI-Programmierung 980
23.3.1 Ablauf eines CGI-Programms 980
23.3.2 Decodierung der übergebenen Daten 981
23.3.3 Fehlerbehandlung im Browser 992
23.3.4 Ein Blick auf den HTTP-Header 994
23.3.5 Formulare generieren 996
23.3.6 Binärinformation zurückgeben 1002
23.3.7 Einige einfache Anwendungen 1008
23.4 Das CGI-Modul 1026
23.4.1 Erzeugung eines neuen CGI-Query-Objekts 1030
23.4.2 Formularparameter bearbeiten 1031
23.4.3 CGI-Modul und HTTP-Header 1033
23.4.4 HTML-Header und -Footer 1036
23.4.5 Erzeugung von Formularen 1037
23.4.6 Standard-HTML-Elemente erzeugen 1043
23.4.7 Die funktionsorientierte Schnittstelle 1044
23.4.8 Debugging-Tips 1046
23.5 Datei-Upload per Formular 1048
23.6 Session-Tracking 1051
23.6.1 Zustandsspeicherung über PATH_INFO 1053
23.6.2 Zustandsspeicherung per URL-Encoding 1054
23.6.3 Zustandsspeicherung über Hidden-Felder 1055
23.6.4 Zustandsspeicherung über Cookies 1056
23.7 Datenbankzugriffe in CGI-Programmen 1068
23.8 Captchas 1071
23.9 Fehler im Webserver-Log suchen 1078
23.10 Webseiten lokal zum Browser schicken 1080
24 Suchen und Finden 1082
24.1 Eine kleine lokale Suchmaschine 1085
24.2 Dateien indizieren 1090
24.2.1 Konfiguration des Indexers 1092
24.2.2 Texte indizieren 1095
24.2.3 Ein Volltextindex auf Dateibasis 1102
24.2.4 Ein Volltextindex mit MySQL 1105
24.3 Mit Swish-E Webseiten indizieren 1111
24.4 Links überprüfen 1120
25 Numerik und Statistik 1124
25.1 Mathematikmodule 1125
25.1.1 Große Ganzzahlen 1125
25.1.2 Große Gleitkommazahlen 1128
25.1.3 Komplexe Zahlen 1130
25.1.4 Trigonometrische Funktionen 1132
25.2 Deskriptive Statistik 1137
25.2.1 Tabellarische und grafische Darstellung 1137
25.2.2 Mittelwert, Varianz, Standardabweichung, Standardfehler 1138
25.2.3 Minimum, Maximum, Median, Modalwert 1140
25.2.4 Lineare Regression 1142
25.3 Geometrie: Polygonumfang und -Fläche 1144
25.4 Nullstellen von Gleichungen 1146
25.5 Numerische Integration 1151
25.6 Permutationen 1153
26 Perl und die Hardware 1154
26.1 You must be root … 1155
26.2 Die parallele Schnittstelle 1156
26.2.1 Parallele Grundlagen 1157
26.2.2 Programmierung der parallelen Schnittstelle 1160
26.3 Die serielle Schnittstelle 1164
26.3.1 Serielle Grundlagen 1164
26.3.2 Programmierung mit Perl 1168
26.3.3 Steuer- und Statusleitungen, Meldungen, Einstellungen 1175
26.3.4 Serielle Ein- und Ausgabe, Timeouts 1182
26.3.5 Betrieb mit Modems etc. 1189
26.3.6 Messwerterfassung über die serielle Schnittstelle 1195
26.4 Die USB-Schnittstelle 1203
26.4.1 Informationen über den USB einholen 1204
26.4.2 USB über die libusb ansteuern 1211
Literatur 1218
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.
| Erscheint lt. Verlag | 1.1.2010 |
|---|---|
| Verlagsort | München |
| Sprache | deutsch |
| Themenwelt | Mathematik / Informatik ► Informatik ► Programmiersprachen / -werkzeuge |
| Schlagworte | Handbuch • Perl • Programmierung |
| ISBN-10 | 3-446-42449-0 / 3446424490 |
| ISBN-13 | 978-3-446-42449-4 / 9783446424494 |
| Informationen gemäß Produktsicherheitsverordnung (GPSR) | |
| Haben Sie eine Frage zum Produkt? |
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich