Perl-Programmierung: Einfache Beispiele

Aus Wikibooks

Wechseln zu: Navigation, Suche
Zurück zu CPAN | Hoch zu Inhaltsverzeichnis | Vor zu Funktionsreferenz


Inhaltsverzeichnis

[Bearbeiten] Fallunterscheidung

Ein Beispiel für eine if/elseif/else-Struktur

#!/usr/bin/perl -w
# if/elsif/else
# 20041110
 
if (1233 > 2333) {
    print "Ergebnis 1\n";
}
elsif (3333 > 4444) {
    print "Ergebnis 2\n";
} 
else {
    print "Ergebnis 3\n";
}
 
# ergibt: Ergebnis 3
# das selbe ohne if/elsif/else (TIMTOWTDI-Prinzip)
 
print "Ergebnis ", 1233 > 2333 ? 1 : 3333 > 4444 ? 2 : 3, "\n";

[Bearbeiten] Stringvergleiche

Ein Beispiel für den Vergleich von Strings

#!/usr/bin/perl -w
# Stringvergleich eq, ne (equal, not equal)
 
if ("huhu" eq "huhu") {
    print "beide Zeichenketten gleich";
}
 
if ("wiki" ne "books") {
    print "strings sind unterschiedlich";
}

Ein weiteres Beispiel

#!/usr/bin/perl -w
# 20041110
 
print "1+1 = 4\n" if 1+1 == 2;

something else

#!/usr/bin/perl -w
print "\aAlarm\n";                              # \a gibt einen Piepton aus, es folgt die Zeichenkette 'Alarm'
                                                # und \n gibt eine neue Zeile aus;
print `hostname`;                               # fuehrt das Kommando "hostname" in einer Shell aus und liest
                                                # die Standardausgabe der Shell und zeigt diese als Resultat
                                                # an. "hostname" ist also kein Perl-Befehl!;
 
$var0 = "0123456789";
print substr($var0, 3, 5);                      # gibt '34567' aus; substr holt aus $var0 von Zeichen nr.3 die 
                                                # darauf folgenden 5 Zeichen und gibt sie aus ...;

[Bearbeiten] Dateihandling

Ausgabe des Inhaltes von $text in die Datei test.txt

 #!/usr/bin/perl
 print "Wie heißt Du? ";
 $text = <STDIN>;
 chomp($text);
 open(file, ">test.txt") or die "Fehler beim Öffnen der Datei: $!\n";
 print file $text;
 close (file) or die "Fehler beim Schließen von 'test.txt': $! \n";

[Bearbeiten] Umwandlung in HTML

Funktion zur Umwandlung von Umlauten in deren HTML-Äquivalente. Alternativ können diese mit dem Zusatzparameter '2' auch in der Doppellautschreibweise dargestellt werden. Die ganze Funktion kann in eine Bibliotheks-Datei im cgi-bin-Verzeichnis ausgelagert werden, um dann bei Bedarf von allen CGI-Perl-Dateien mit "require" eingebunden zu werden.

sub umlautwechseln {
    my $return = $_[0];          # erster Parameter
    my $matchcode = $_[1];       # zweiter Parameter
    if(!defined($matchcode)) {
        $matchcode = 1;
    }
 
    my @vorlage = (
        ['ä',      'ö',      'ü',      'Ä',      'Ö',      'Ü',      'ß'],
  	['&auml;', '&ouml;', '&uuml;', '&Auml;', '&Ouml;', '&Uuml;', '&szlig;'],
  	['ae',     'oe',     'ue',     'Ae',     'Oe',     'Ue',     'ss']
    );
 
    my $vorlage = 0;
    for (my $i=0; $i<=6; $i++) {                           # alternativ: for ( 0 .. 6 )
        while ( index($return, $vorlage[0][$i], 0) > -1 ) {
            substr ($return, index($return, $vorlage[0][$i], 0), 1) = $vorlage[$matchcode][$i];
        }
    }
 
    return $return;
}
 
1;

Das selbe Beispiel könnte ebenfalls mit Regular-Expressions gelöst werden, wie man im folgenden Beispiel sehen kann:

#!/usr/bin/perl
use strict;
use warnings;
 
sub umlautwechseln {
    my $messystring = shift;
    my $conversion = shift || "1";
 
    my @vorlage = (
        [   'ä',   'ö',      'ü',      'Ä',      'Ö',     'Ü',      'ß'],
        ['&auml;', '&ouml;', '&uuml;', '&Auml;', '&Ouml;','&Uuml;', '&szlig;'],
        [   'ae',  'oe',     'ue',     'Ae',     'Oe',    'Ue',     'ss']
    );
 
    for (0 .. 6) {
        $messystring =~ s/$vorlage[0][$_]/$vorlage[$conversion][$_]/g;
    }
 
    return $messystring;
}

Erläuterung der Funktion:

Diese Funktion erwartet 2 Parameter, wobei der zweite Parameter optional ist ( $conversion ). Falls der zweite Parameter nicht angegeben wird, wird der Wert "1" angenommen. Der erste Parameter ist der Skalar mit den Sonderzeichen.

In Zeile 16 erfolgt die eigentliche Arbeit. $messystring wird mittels RegEx untersucht und entsprechende Treffer werden ersetzt.

[Bearbeiten] Erzeugung von SQL-Code

Dieses Script wird benötigt für die Beispieldatenbank der Einführung in SQL. Es erzeugt etwas mehr als 100.000 SQL-Anweisungen für MySQL, die mit einer Kanalumleitung in die Beispieldatenbank eingespielt werden können, und dort jeweils einen Datensatz erzeugen.

Für Perl-Neulinge von Interesse sind vermutlich eher

  • die Verwendung der ForEach-Schleife,
  • die alternative Textausgabe, die besonders für längere Texte geeignet ist,
  • der alternative Zugriff auf die Datenbank, der ohne das DBI-Modul auskommt.
 #!/usr/bin/perl
 
 use strict;
 
 my @namen=("Meyer", "Müller", "Schulze", "Schneider", "Schubert", "Lehmann", 
  "Bischof", "Kretschmer", "Kirchhoff", "Schmitz", "Arndt");
 my @vornamen=("Anton", "Berta", "Christoph", "Dieter", "Emil", "Fritz", "Gustav", 
  "Harald", "Ida", "Joachim", "Kunibert", "Leopold", "Martin", "Norbert", "Otto", 
  "Peter", "Quentin", "Richard", "Siegfried", "Theodor", "Ulf", "Volker", "Walter", 
  "Xaver", "Yvonne", "Zacharias");
 my @orte=("Essen", "Dortmund", "Bochum", "Mülheim", "Duisburg", "Bottrop", 
  "Oberhausen", "Herne", "Witten", "Recklinghausen", "Gelsenkirchen", 
  "Castrop-Rauxel", "Hamm", "Unna", "Herten", "Gladbeck");
 my $orte="";
 my @strassen=("Goethestr.", "Schillerstr.", "Lessingstr.", "Badstr.", "Turmstr.", 
  "Chausseestr.", "Elisenstr.", "Poststr.", "Hafenstr.", "Seestr.", "Neue Str.", 
  "Münchener Str.", "Wiener Str.", "Berliner Str.", "Museumsstr.", "Theaterstr.", 
  "Opernplatz", "Rathausplatz", "Bahnhofstr.", "Hauptstr.", "Parkstr.", 
  "Schlossallee");
 my @gesellschaften=("Zweite allgemeine Verabsicherung", "Sofortix 
  Unfallversicherung", "Buvaria Autofutsch", "Provinziell", "Vesta Blanca");
 my @beschreibungen=("Standardbeschreibung Nr 502", "08/15", "Blablabla", 
  "Der andere war schuld!", "Die Ampel war schuld!", "Die Sonne war schuld!", 
  "Die Welt ist schlecht!!");
 my $beschreibungen="";
 my $gesellschaften=0;
 my $gebdat="";
 my $fdat="";
 my $hnr=0;
 my $eigen="";
 
 foreach my $ort (@orte) {
   my $gplz=int(rand(90000))+10000;
   foreach my $strasse (@strassen) {
     my $plz=$gplz+int(rand(20));
     foreach my $name (@namen) {
       foreach my $vorname(@vornamen) {
         $gebdat=dating(80, 1907);
         $fdat=dating(80, 1927);
         $hnr=int(rand(100))+1;
         if(rand(2)>1) {$eigen="TRUE";} else {$eigen="FALSE";}
         my $vers=int(rand(5));
 
 print <<OUT1
 insert into VERSICHERUNGSNEHMER(VNE_NAME, VNE_VORNAME, VNE_GEBURTSDATUM, 
 VNE_DATUM_FUEHRERSCHEIN, VNE_ORT, VNE_PLZ, VNE_STRASSE, 
 VNE_HAUSNUMMER, VNE_EIGENER_KUNDE_J_N, VNE_VERSGESELLSCHAFT_ID) values ("$name", 
 "$vorname", "$gebdat", "$fdat", "$ort", "$plz", "$strasse", "$hnr", "$eigen", 
 "$vers");
 OUT1
 }}}}
 
 for(my $a=0; $a<=500; $a++)
 {
   my $udat=dating(3, 2004);
   my $ort=$orte[int(rand(16))];
   my $beschreibung=$beschreibungen[int(rand(7))];
   my $shoehe=int(rand(20000000))/100;
   my $verletzte;
   if(rand(2)>1) {$verletzte="TRUE";} else {$verletzte="FALSE";}
   my $mitarbeiter=int(rand(10))+1;
 print <<OUT2
 insert into SCHADENSFAELLE(SCF_DATUM, SCF_ORT, SCF_BESCHREIBUNG, 
 SCF_SCHADENSHOEHE, SCF_VERLETZTE_J_N, SCF_MITARBEITER_ID) values 
 ("$udat", "$ort", "$beschreibung", $shoehe, "$verletzte", $mitarbeiter);
 OUT2
 }
 
 for(my $a=1; $a<=500; $a++)
 {
   my $vne=int(rand(100000))+1;
 print <<OUT3
 insert into ZUORD_VNE_SCF(ZVS_SCHADENSFALL_ID, ZVS_VERSICHERUNGSNEHMER_ID) values 
 ($a, $vne);
 OUT3
 }
 
 sub dating
 {
   my $range=$_[0];
   my $radix=$_[1];
   my $y=int(rand($range))+$radix;
   my $m=int(rand(12))+1;
   my $d=int(rand(28))+1;
   my $return=$y . "-" . $m . "-" . $d;
   return $return;
 }


Zurück zu CPAN | Hoch zu Inhaltsverzeichnis | Vor zu Funktionsreferenz


Persönliche Werkzeuge
Buch erstellen