Zum Hauptinhalt springen

Perl - Reference

  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