1# PERL = Practical Extraction and Report Language
2# Comprehensive Perl Archive Network - CPAN (http://www.cpan.org)
3 # Perl Interpret downloadbar unter:
4 # http://wwww.perl.com
5 # http://www.activestate.com/pw32
6
7 # Perl-Script ausfuehren:
8 # perl scriptname -d ... Debugger
9 # perl scriptname -w ... Warnungen (deaktivierbar)
10 # perl scriptname -W ... Warnungen fest aktiviert
11 # perl scriptname -X ... Warnungen fest deaktiviert
12 # perl scriptname -c ... Syntaxanalyse
13
14
15# Hello-World Beispiel:
16 #! user/bin/perl # Pfadangabe des Interpreters
17 print "Hello world! \n"; # \r ... Carriage Return (Zeilenvorschub)
18 # \n ... Line Feed
19 # \a ... Alarm
20 # \t ... Tabulator
21 # \b ... Backspace
22 # \e ... Escape
23 # \f ... Formfeed (Seitenvorschub)
24
25
26# Datentypen
27 # Skalare (Zahl, Text, Referenz)
28 $a = 0;
29 $a = 0xff;
30 $b = "text";
31 $b = 'text';
32 $c = $a . "text" . $b;
33
34
35 # Arrays (Indizierbare Liste skalarer Werte)
36 @d = ("one", "two", $b, "text");
37 # d[0] ... one
38 # d[1] ... two
39 # d[2] ... text
40 # d[3] ... text
41
42 $tmp = $d[0]; # erstet Element
43 $tmp = $d[-1]; # letztes Element
44 push(@d, "three"); # Element/e am Ende hinzufuegen
45 push(@c, "four", @d);
46 $tmp = pop(@d); # letztes Element entfernen u. zurueckgeben
47 delete(@d[0]); # Element loeschen
48 delete(@d[0, 2]);
49
50 $tmp = @d; # tmp ... onetwotexttext
51 $tmp = join(":", @d); # tmp ... one:two:text:text
52 @d = split(/:/, $tmp); # Aufteilen und in ein Array speichern
53
54 sort @d; # nach Alphabet sortieren
55 reverse @d; # Elemente umkehren
56
57 $nr = scalar @d; # Anzahl der Array-Elemente
58 $nr = $#d + 1; # Index des letzten Elements
59
60 # Hashes (Assoziatives Array skalarer Werte)
61 %address = ("name" => "muster1",
62 "street" => "muster2",
63 "town" => "muster3",
64 "state" => "muster4"
65 );
66
67 $tmp = $address{"name"}; # Rueckgabe des Wertes mit bestimmten Key
68 $address{"door"} = "2"; # Element hinzufuegen
69 delete($address{"town"}); # Key und Wert loeschen
70 delete($address{"town", "state"});
71
72 @tmp = keys %address; # Erhalt saemtlicher Keys
73 @tmp = values %address; # Erhalt saemtlicher Werte
74 if (exists($address{"name"}))
75 { ... } # Abfrage ob Element vorhanden ist
76
77 # spezial Variablen
78 $_ # standardmaessige Eingabe-, Ausgaberaum
79 # (aktuelles Element innerhalb von
80 # Schleifen)
81 $/ # Trennzeichen fuer Eingaberecords
82 # (defaultmaessig: Newline-Zeichen)
83 $\ # Trennzeichen fuer Ausgaberecords
84 # (defaultmaessig: Leerstring)
85 $0 # Name des Skripts
86 $^O # Name des Betriebssystems
87
88 @ARGV # Array mit den Kommandozeilen-Parametern
89 @INC # Verzeichnis-Liste, wo nach Perl-Scripten
90 # gesucht wird
91
92 %ENV # Umgebungsvariablen
93
94 # Referenzen
95 $ref = \$var; # Referenz von einem Skalar $var
96 $$ref # der von $ref referenzierte Skalar
97
98 $ref = \@var; # Referenz von einem Array
99 $$ref[0] # Dereferenzierung einer Array-Referenz
100 $ref->[0]
101
102 $ref = \%var; # Referenz von einem Hash
103 $$ref{"key"} # Dereferenzierung einer Hash-Referenz
104 $ref->{"key"}
105
106 $ref = \&mysub; # Referenz einer Funktion
107 &$ref(); # Aufruf der Funktion
108 $ref->();
109
110 $isRef = ref($var); # Ueberprueft ob Variable Referenz ist
111
112
113# Operatoren
114 # Arithmetisch
115 $x = $y + $z; # Addition
116 $x += $y;
117 $x = $y - $z; # Subtraktion
118 $x = $y * $z; # Multiplikation
119 $x = $y / $z; # Division
120 $x = $y % $z; # Modulo
121 $x = $y ** $z; # Exponentierung
122
123 $x = $y . $z; # Zusammenfuehrung
124 $x = $y x $z; # Wiederholung, $y wird $z mal wiederholt
125
126 # Numerisch
127 == eq # gleich
128 != ne # ungleich
129 < lt # kleiner
130 <= le # kleiner gleich
131 > gt # groesser
132 >= ge # groesser gleich
133 <=> cmp # Vergleich
134
135 # Logisch
136 $x && $y $x and $y # Und
137 $x || $y $x or $y # Oder
138 $x xor $y # Exklusiv-Oder
139 !$x not $x # Negation
140
141 # Bitoperationen
142 $x & $y # Und
143 $x | $y # Oder
144 $x ^ $y # Exklusiv-Oder
145 ~$x # Komplement
146 $x<<1 # Links-Shift
147 $x>>1 # Rechts-Shift
148
149
150# Schleifen
151 # foreach
152 foreach $skalar (@array)
153 { ... }
154
155 foreach $skalar (keys %hash)
156 { ... }
157
158 # der Schleifenrumpf wird fuer jedes Element des Arrays ausgefuehrt
159 # das aktuelle Element wird dem $skalar uebergeben
160 # wenn @array leer ist, wird der Anweisungsblock nie ausgefuehrt
161
162 # for
163 for ($i=0, $i<10, $i++)
164 { ... }
165
166 $i=0 # links ... Startanweisung
167 $i<10 # mitte ... Bedingung
168 $i++ # rechts ... Auszufuehrende Anweisung nach einem Durchlauf
169
170 # wird solange ausgefuehrt, solange die Bediengung erfuellt ist
171
172 # if-else
173 if ($bedingung1)
174 { ...
175 }
176 elsif ($bedingung2)
177 { ...
178 }
179 else
180 { ...
181 }
182
183 if # wenn die $bedingung1 erfuellt ist,
184 # wird der zugehoerige Anweisungsblock ausgefuehrt
185 elsif # wird nur ueberprueft, wenn vorherige Bedingungen nicht erfuellt
186 # wurden (vorangestellte if/elsif)
187 else # wird ausgefuehrt wenn saemtliche vorherigen Bedingungen nicht
188 # erfuellt wurden
189
190 # while und unless
191 while ($bedingung)
192 { ...
193 }
194
195 do
196 { ...
197 }
198 while ($bedingung)
199
200 # solange die Bedingung erfuellt ist,
201 # wird der Anweisungsblock ausgefuehrt
202
203 # until
204 until ($bedingung)
205 { ...
206 }
207
208 do
209 { ...
210 }
211 until ($bedingung);
212
213 # bis die Bedingung erfuellt wird,
214 # wird der Anweisungsblock ausgefuehrt
215
216
217# Funktionen
218 sub functionName
219 {
220 @_ # Array mit uebergebenen Parametern
221 $_[0] # erster Parameter
222 $_[1] # zweiter Parameter
223 ...
224 }
225
226 functionName; # Aufruf der Subroutine
227 functionName($parameter); # Aufruf mit Uebergabe
228
229 # vordefinierte Funktionen
230 chr($var) # Rueckgabe des Zeichens welches durch
231 # Dezimalzahl repraesentiert wird
232 hex($var) # Wert interpretiert als Hexadezimalstring
233 oct($var) # Wert interpretiert als Oktalstring
234 ord($var) # numerische Werte des ersten Zeichens
235
236 abs($var) # Absolutwert
237 int($var) # ganzzahliger Teil
238
239 sqrt($var) # Quadratwurzel
240 exp($var) # e^$var
241 log($var) # natuerliche Logarithmus (Basis e)
242
243 sin($var) # Sinus (Bogenmass)
244 cos($var) # Cosinus
245 atan2($y, $x) # Arkus-Tangens
246
247 srand($time) # Initialisierung des Zufallszahlen-
248 # generators
249 rand($var) # Zufallszahl zwischen 0 und $var
250
251 time # Anzahl Sekunden seit Beginn der Epoche
252 @time = localtime(time) # Zeit
253 # Index Beschreibung
254 # 0 Sekunden
255 # 1 Minuten
256 # 2 Stunden
257 # 3 Tag des Monats
258 # 4 Monat (Jaenner = 0)
259 # 5 Jahre seit 1900
260 # 6 Wochentag (Sonntag = 0)
261 # 7 Jahrestag (1. Jaenner = 0)
262 # 8 Sommerzeit (SZ = True, WZ = False)
263 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = @time;
264
265
266# Filehandling
267 # Datei oeffnen
268 open(FH, "test.txt"); # zum Lesen
269 open(FH, "<$file"); # zum Lesen
270 open(FH, ">$file"); # zum Schreiben (Datei ueberschreiben)
271 open(FH, ">>$file"); # zum Schreiben (an Datei anhaengen)
272
273 open(FH, ">$file") || die("file not found");
274
275 open(FH, "<:bytes", "test.bin");
276 # :bytes 8-Bit-Bytes
277 # :encoding(UTF-8) waehlt Codierung
278 # :raw Low-Level-E/A
279
280 # FD ist ein Filehandle (STDIN, STDOUT, STDERR vordefiniert)
281
282 # Datei schliesen
283 close(FH);
284
285 # Datei lesen und schreiben
286 $char = getc(FH); # Zeichen lesen
287 $readChars = read(FH, $chars, $length, $offset);
288 $line = <FH>; # Zeile lesen
289 $line = readline(FH);
290 @allLines = <FH>; # saemtliche Zeilen lesen
291
292 print FH "text"; # in Datei schreiben
293
294 eof(FH); # TRUE wenn am Ende oder nicht geoeffnet
295
296 # Dateitestoperationen
297 if (-e "test.txt") # -e ... ob Datei existiert
298 { ...
299 }
300 # -r ... lesbar
301 # -w ... schreibbar
302 # -x ... ausfuehrbar
303
304 # -z ... Datei hat 0 Bytes
305 # -s ... existiert und Groesse ungleich 0
306
307 # -f ... "normale" Datei
308 # -d ... Ordner
309 # -T ... Datei enthaelt ASCII Text
310 # -B ... Binaerdatei
311
312 # Operationen fuer Verzeichnisse
313 opendir(FH, "C:\\");
314 closedir(FH);
315
316 $entry = readdir(FH); # naechster Verzeichnis-Eintrag
317 # undef, wenn am Ende angelangt
318 $entries = readdir(FH); # saemtliche Verzeichnis-Eintraege
319
320 # weitere Operationen
321 chmod # Datei-Rechte aendern
322 chown # Datei-Besitzer aendern
323 rename # umbennen
324 unlink # loeschen
325 stat # zusaetzliche Informationen
326 chdir # Arbeitsverzeichnis wechseln
327 mkdir # Verzeichnis anlegen
328 rmdir # Verzeichnis loeschen (nur wenn leer)
329
330
331# Aufteilung von Projekten
332 # Library
333 # config.pl # abgelegt in "~/libs"
334 my $confVal1 = 10; # lokale Variable
335 our $confVal2 = "test"; # globale Variable
336 1;
337
338 # basesubs.pl # abgelegt in "~/libs"
339 print "basesubs";
340
341 sub sub1
342 {
343 print "basesubs-sub1";
344 }
345 1;
346
347 # projectsubs.pl # abgelegt im Projekt-Ordner
348 package Project; # Angabe eines Namensraumes
349 print "projectsubs";
350
351 sub sub2
352 {
353 print "projectsubs-sub2";
354 }
355
356 sub sub3
357 {
358 print "projectsubs-sub3";
359 }
360 1;
361
362 # useall.pl # abgelegt im Projekt-Ordner
363 print "main 1";
364 push(@INC, "~/libs"); # Suchpfad ergaenzen
365 require "config.pl";
366 require "basesubs.pl";
367 require "projectsubs.pl";
368
369 print "main 2";
370 $tmp = $confVal2;
371 sub1();
372 Project::sub2();
373 sub3();
374 print "main 3";
375 # Ausgabe:
376 # main 1
377 # basesubs
378 # projectsubs
379 # main 2
380 # basesubs-sub1
381 # projectsubs-sub2
382 # projectsubs-sub3
383 # main 3
384
385 # Modul
386 # Module.pm # abgelegt in "~/lib"
387 package Special::Module;
388 $Special::Module::VERSION = 0.1;
389 use Exporter;
390 @ISA = ("Exporter");
391 our @EXPORT = ("sub2");
392 print "Module";
393
394 sub sub1
395 {
396 print "Module-sub1";
397 }
398 sub sub2
399 {
400 print "Module-sub2";
401 }
402 1
403
404 # useall.pl # abgelegt im Projekt-Ordner
405 print "main 1";
406 use lib '~/lib'; # Suchpfad ergaenzen
407 use Special::Module; # gleichwertig mit:
408 # require "Special/Module.pm"
409 # import default symbols
410
411 print "main 2";
412 Special::Module::sub1();
413 sub2();
414 print "main 3";
415 # Ausgabe:
416 # Module
417 # main 1
418 # main 2
419 # Module-sub1
420 # Module-sub2
421 # main 3
422
423
424# weitere Operationen
425 exec # fuehrt Befehl aus und kehrt nicht zurueck
426 system # fuehrt Befehl in einem Child-Prozess aus,
427 # und wartet auf dessen Ende
428 sleep # Pause fuer x Sekunden