Sie sind auf Seite 1von 86

Perl

#!/usr/bin/perl
die

Taschenkettensäge
unter den

Programmiersprachen

Vortrag von Brigitte Jellinek,


18C3 1 9 C 3
if
#!/usr/bin/perl Inhalt
• Perl für Anfängerinnen
#!/usr/bin/perl Inhalt
• Perl für Anfängerinnen
• Perl für Fortgeschrittene
#!/usr/bin/perl Inhalt
• Perl für Anfängerinnen
• Perl für Fortgeschrittene
– und Umsteiger
#!/usr/bin/perl Inhalt
• Perl für Anfängerinnen
• Perl für Fortgeschrittene
– und Umsteiger
• Perl für Profis
#!/usr/bin/perl Inhalt
• Perl für Anfängerinnen
• Perl für Fortgeschrittene
– und Umsteiger
• Perl für Profis
• Die Perl Community
#!/usr/bin/perl Inhalt
• Perl für Anfängerinnen
• Perl für Fortgeschrittene
• Perl für Profis
• Die Perl Community
• Perl Zukunft
#!/usr/bin/perl Inhalt
• Perl für Anfängerinnen
• Perl für Fortgeschrittene
• Perl für Profis
• Die Perl Community
• Perl Zukunft
• Buchtipps
#!/usr/bin/perl Perl für Anfänger
x Gründe warum man Perl als
erste Programmiersprache
lernen sollte
#!/usr/bin/perl Perl für Anfänger

Wer programmieren lernt,


hat ein Recht auf Spass
Mehr Spass durch
Skript-Sprachen
#!/usr/bin/perl

• easy things should be easy


– keine sinnlose (oo-)Bürokratie

print "Hallo Welt, wie gehts?";


Mehr Spass durch
Skript-Sprachen
#!/usr/bin/perl

• interpretiert
– schnelle Rückmeldung
Mehr Spass durch
Skript-Sprachen
#!/usr/bin/perl

• wenige versch. Datentypen


– Zahl, Zeichenkette,
Wahrheitswert? alles Skalar
$a = 42;
print "Variable a ist $a \n";

$a = "zweiundvierzig";
print "Variable a ist $a \n";

$a = 13.7603;
print "Variable a ist $a \n";
Mehr Spass durch
Skript-Sprachen
#!/usr/bin/perl

Skript-Sprachen:
– Perl, PHP, VBScript, Python, Ruby,
awk, ... <hier könnte ihre Lieblingssprache
stehen>

„richtige“ Programmiersprachen
– C, C++, Java, Pascal, Ada, ...
<hier könnte ihre Lieblingssprache stehen>
#!/usr/bin/perl Perl für Anfänger

Wer programmieren lernt,


hat ein Recht auf
coole
Beispiele
#!/usr/bin/perl cool? uncool?
• uncool • cool
– n! berechnen – bunt
– DOS Programm – interaktiv
– ewig – so gut wie die
programmieren, Profis
um ein Fenster
zu erzeugen
• heute: Web
Mehr Spass durch
Web-Programmierung
#!/usr/bin/perl
• Counter
• Gästebuch
• Postkarte
• E-Mail schicken
• Fotoalbum
• Abstimmung
#!/usr/bin/perl Web-Programmierung
• HTML
• Warnung vor Javascript
• Webspace mit ...
• Perl, PHP oder Visual Basic 
#!/usr/bin/perl Perl für Anfänger

Wer programmieren lernt,


sollte dafür nicht ein Vermögen
ausgeben müssen
#!/usr/bin/perl Perl ist gratis
• Larry Wall + die Gefährten
#!/usr/bin/perl Perl ist gratis + überall
• Larry Wall + die Gefährten
• Artistic License
• auf allen UNIXen, Mac OS X
– which perl
• Windows:
– ActiveState (mit vielen modulen)
– XAMPP (mit apache,mysql,php)
• MacPerl
#!/usr/bin/perl Perl für Anfänger
• 3 Gründe warum man Perl als
erste Programmiersprache
lernen sollte
– Spass weil Skriptsprache
– Coole Beispiele mit CGI
– Gratis und überall 
Perl für
Fortgeschrittene
#!/usr/bin/perl
x Gründe, warum Leute
die schon programmieren
können Perl lernen sollten
Weniger Aufwand,

veraltet, aber trotzdem beeindruckend


mehr Wirkung
#!/usr/bin/perl
Lines of Code Lines of
pro Function Code pro
Point Zeile Perl
Basic Assembly 575 11,5
Macro Assembly 400 8,0
C 225 4,5
Cobol 74 (Cobol I) 220 4,4
FORTRAN 210 4,2
Cobol 85 (Cobol II) 175 3,5
Pascal 160 3,2
C++ 80 1,6
Java 80 1,6
Oracle 60 1,2
Perl 50 1,0
JavaScript 50 1,0
Shell Script 50 1,0
#!/usr/bin/perl kenn ich schon
• Syntax: C, C++, Java, C#

$a[ 0 ] = 42;
$a[ 1 ] = "zweiundvierzig";
$a[ 2 ] = 3.141;

for ($i=0; $i < 3; $i++ ) {

print "$i: Wert $a[ $i ]\n";

}
#!/usr/bin/perl kenn ich schon
• Patterns: vi, grep, egrep, sed

$text = "Voldemort besitzt den zweiten


Zauberstab, der eine Phönixfeder enthält.";

$text =~ s/Voldemort/Du weisst schon wer/g;

print $text;
#!/usr/bin/perl kenn ich schon
• Assoziative Arrays: awk

$ring{'Gandalf'} = "Narya";
$ring{'Galadriel'} = "Nenya";
$ring{'Elrond'} = "Velia";
$ring{'Frodo'} = "Ash Nazgh";
#!/usr/bin/perl kenn ich schon
• Listen: Lisp

@a = ( 0, "eins", 2 ); # Liste zuweisen

$a[ 3 ] = "drei"; # über Index zuweisen

push( @a, "bier"); # hinten anfügen

push( @a, "fünf", 6); # auch mehrere Elemente

splice( @a, 4, 1, "VIER!" );


# in schweren Fällen:
# in der Mitte ersetzen

print "@a";
#!/usr/bin/perl kenn ich schon
• Dateien + Ordner: shell
#!/usr/bin/perl Von x zu Perl
#!/usr/bin/perl Von PASCAL zu Perl
BEGIN

END

BEGIN Pascal;
END Pascal;
#!/usr/bin/perl Von PASCAL zu Perl
{

BEGIN Pascal;
END Pascal;
#!/usr/bin/perl Von PASCAL zu Perl
• Syntax { } statt BEGIN END
• nie wieder compilieren
• Weniger Aufwand,
grössere Wirkung

BEGIN Pascal;
END Pascal;
#!/usr/bin/perl Von C zu Perl
• Schreibweise sehr ähnlich
• weniger Stress mit Strings
• endlich Plattformunabhängig
• Variablen haben ein Sigil
$a @b %c
• Weniger Typen
• C an Perl antackern
– XS oder Inline::C  int main(
int argc,
char * argv[]
#!/usr/bin/perl Von C++/Java zu Perl
• weniger Bürokratie
• nicht alles muss OO sein
• Simple things should be
simple, complicated things
should be possible 
public class HelloWorld
#!/usr/bin/perl
{
public static void main(
String args[])
{
System.out.println(
"Hello World");
}
}
#!/usr/bin/perl

print "Hello World";


#!/usr/bin/perl Von Javascript zu Perl
• zur Abwechslung:
eine Sprache die funktioniert
• Variablen haben ein Sigil
$a @b %c
• Typen gleich 
#!/usr/bin/perl Von PHP zu Perl
• gratuliere!
– du bist schon fast da
 Syntax
 Typen
 Sigil (~Änderung)
• grosse Projekte
– mit Namespaces *
• viele Module
– mit CPAN
• SysAdmin, DataMunging,
Kommandozeile 
<?php
// gehört zu Foo
#!/usr/bin/perl
$a = 10;
$b = 20;
go();

// gehört zu Bar
$bar_a = 42;
$bar_b = 23;
bar_go();
package Foo;
$a = 10;
$b = 20;
#!/usr/bin/perl
go();

package Bar;
$a = 42;
$b = 23;
go();
print $Foo::a;
print $Foo::b;
Foo::go();
#!/usr/bin/perl Neu in Perl: Hash
• nicht was ihr denkt
• „assoziatives Array“
• Index nicht Integer sondern String

Narya Nenya Vilya Ash Nazgh


0 1 2 3

Narya Nenya Vilya Ash Nazgh


Gandalf
0 Galadriel
1 Elrond
2 Frodo
3
#!/usr/bin/perl Neu in Perl: RegExp
• oder „pattern matching“

• Text Ersetzen
• Muster in Text finden

• ein paar Sonderzeichen


m/^Am Anfang war/
m/\d+ EURO/
#!/usr/bin/perl Neu in Perl: RegExp

$text = "Voldemort besitzt den zweiten


Zauberstab, der eine Phönixfeder enthält.";

print "Vorher: $text <br>\n";

$text =~ s/Voldemort/Du weisst schon wer/g;

print "Nachher: $text <br>\n";

if ( $text =~ m/Zauberstab/ ) {

print "Zauberstab gefunden!";

}
#!/usr/bin/perl Module, Module, ..

• es gibt ziemlich viele Module


• z.B.
– Webformulare auslesen mit CGI
– Bilder malen mit GD
– Webseiten runterladen mit LWP
– Sachen rauslesen mit HTML::*
– Datenbanken aller Art mit DBI
#!/usr/bin/perl Module installieren
• UNIX
– mit cpan von CPAN
– lädt vom Internet, kompiliert
(falls nötig), installiert
• Windows
– mit ppm
– lädt vom Internet
(vorkompiliert),
installiert
Perl für
Fortgeschrittene
#!/usr/bin/perl
4 Gründe, warum Leute die
schon programmieren können
Perl lernen sollten
– Ähnlich wie ....
– Pattern Matching
– Hashes
– Viele Module
#!/usr/bin/perl Perl Anwendung
(typische)
#!/usr/bin/perl Perl Anwendung: CGI
• Du sollst das Modul CGI
verwenden
• Du sollst das Modul CGI
verwenden
• Du sollst das Modul CGI
verwenden

• Siehe
http://perlwelt.horus.at/Beispiele/CGI/
Perl Anwendung:
System-Administration
#!/usr/bin/perl
• Dateien und Ordner
@dateien = glob "*.zone"
if ( -e ‘done‘ and -M ‘done‘ > 1) { .. }
-X, chdir, chmod, chown, chroot, fcntl, glob, ioctl, link, lstat, mkdir, open, opendir,
readlink, rename, rmdir, stat, symlink, umask, unlink, utime

• UNIX (eingebaut)
– chmod, chown, chroot, crypt, dbmclose, dbmopen, dump, endgrent, endhostent, endnetent,
endprotoent, endpwent, endservent, exec, fcntl, flock, fork, getgrent, getgrgid, gethostent,
getlogin, getnetbyaddr, getnetbyname, getnetent, getppid, getprgp, getpriority,
getprotobynumber, getprotoent, getpwent, getpwnam, getpwuid, getservbyport, getservent,
getsockopt, glob, ioctl, kill, link, lstat, msgctl, msgget, msgrcv, msgsnd, open, pipe, readlink,
rename, select, semctl, semget, semop, setgrent, sethostent, setnetent, setpgrp, setpriority,
setprotoent, setpwent, setservent, setsockopt, shmctl, shmget, shmread, shmwrite, socket,
socketpair, stat, symlink, syscall, sysopen, system, times, truncate, umask, unlink, utime,

wait, waitpid

• Win32 (Module) Net::LDAP


– AuthenticateUser, ChangeNotify, Clipboard, Console, DBIODBC, Event, EventLog, File,
FileSecurity, Internet, IPC, Mutex, NetAdmin, NetResource, ODBC, OLE, Browser, Browser,
Const, Enum, NEWS, NLS, TPJ, Variant, PerfLib, Pipe, Process, Registry, Semaphore, Service,
Perl Anwendung:
Data Munging
#!/usr/bin/perl
• umformatieren
• Ziel: Text, HTML, SQL, XML,...
• Quelle: jedes kranke Format
• Werkzeuge
– Pattern Matching
– binär: pack / unpack
– Parse::RecDescent (yacc++)
#!/usr/bin/perl Perl für Profis

x Gründe, warum Profis an Perl


Freude haben werden
#!/usr/bin/perl TMTOWTDI

There‘s more
than one way
to do it

= Unglaubliche
Flexibilität der Syntax
#!/usr/bin/perl TMTOWTDI
print "hallo"; # funktion ohne klammer
print ("hallo"); # funktion mit klammer

# auch mehrere funktionen:

reverse sort keys %hash;


#!/usr/bin/perl TMTOWTDI

print "ein Anf-z. \" in meinem string";

print 'ein Anf-z. " in meinem string';

print qq{zwei ' Anf-z. " in meinem string};


print qq/zwei ' Anf-z. " in meinem string/;
print qq|zwei ' Anf-z. " in meinem string|;

$text =~ m/gesucht/;

$text =~ m|gesucht|;
$text =~ m=gesucht=;
$text =~ m(gesucht);
Magie: Programme
werden immer kürzer
#!/usr/bin/perl
• flexible Schreibweise
• Kurzschreibweise
• unsichtbare Variable
Magie: Programme
werden immer kürzer
#!/usr/bin/perl
# Datei öffnen (mit Fehlerbehandlung)

$OK = open(HANDLE, "datei.txt");

if ( not $OK ) {
die "Problem beim lesen der Datei: $!";
}
Magie: Programme
werden immer kürzer
#!/usr/bin/perl
# Datei öffnen (mit Fehlerbehandlung)

$OK = open(HANDLE, "datei.txt");

unless ( $OK ) {
unless ist if
die "Problem beim lesen der Date: $!"; not
}
Magie: Programme
werden immer kürzer
#!/usr/bin/perl
# Datei öffnen (mit Fehlerbehandlung)

$OK = open(HANDLE, "datei.txt");

die "Problem beim lesen der Date: $!"


Bedingung als
unless $OK; "Nachsatz"
Magie: Programme
werden immer kürzer
#!/usr/bin/perl
# Datei öffnen (mit Fehlerbehandlung)

open(HANDLE, "datei.txt")
or die "Problem beim lesen der Date: $!"
Wie im
Deutschen:
friss oder
stirb!
#!/usr/bin/perl Die unsichtbare Variable
while ( $zeile = <DATA> ) { $zeile ist eine
ganz normale
chomp $zeile; Variable
$zeile =~ s/dies/das/;

print $zeile;

}
#!/usr/bin/perl Unsichtbare Variable
while ( $_ = <DATA> ) { $_ ist eine
besondere
chomp $_;
Variable...
$_ =~ s/dies/das/;

print $_;

}
#!/usr/bin/perl Unsichtbare Variable
while ( <DATA> ) { $_ kann
unsichtbar
chomp;
werden!
s/dies/das/;

print;

}
Sind die denn
völlig wahnsinnig?
#!/usr/bin/perl
#!/usr/bin/perl

Ja
#!/usr/bin/perl Obfuscated Perl Contest

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(<Q>){if(/^#(.*)$/){for(split(
'-',$1)){$q=0;for(split){s/\|/:.:/xg;
s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;
}print chr($q);}}}print"\n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
#!/usr/bin/perl Damian Conway
• Perl Hacker
• Beispiel für weiteren Perl
Wahnsinn
#!/usr/bin/perl Damian Conway
"A less positional programming
language
There is no reason why programming
languages could not also use
inflexions, rather than position, to
denote lexical roles."
#!/usr/bin/perl Damian Conway
A less positional programming
language
There is no reason why programming
languages could not also use
inflexions, rather than position, to
denote lexical roles.
#!/usr/bin/perl Damian Conway

use Lingua::Romana::Perligata;

adnota Illud Cribrum Eratothenis


maximum tum val inquementum tum biguttam tum
stadium egresso scribe.
vestibulo perlegementum da meo maximo .
maximum tum novumversum egresso scribe.
da II tum maximum conscribementa meis listis.
dum damentum nexto listis decapitamentum fac sic
lista sic hoc tum nextum recidementum cis
vannementa da listis.
next tum biguttam tum stadium tum nextum
tum novumversum scribe egresso.
cis
#!/usr/bin/perl Damian Conway
• Acme::Bleach
– bereitet der komplizierte Code
dir Kopfschmerzen?
– Acme::Bleach ist die Lösung!
– Beim ersten Start des
Programmes wird der Code durch
Whitespace ersetzt
– Kein Kopfweh mehr!
– Programm funktioniert weiterhin
#!/usr/bin/perl Perl Community
• Larry Wall
• Perl 6 Design Team + Parrot Team
• Perl Foundation, siehe perl.org
• PerlMongers = Usergroups pm.org
• perlmonks.org = Forum
#!/usr/bin/perl Perl Community

• Konferenzen
– Dt. Perl Workshop
– O‘Reilly Conference
– YAPC
#!/usr/bin/perl Vermeiden
• Manche Bewohner von
Newsgroups
• Uralte CGI-Skripts
– statt „Matts Script“
– nms
#!/usr/bin/perl Perl für Profis

3 Gründe warum Profis an Perl


Freude haben werden
– flexibilität
– Kurzschreibweise
– zu den Wahnsinnigen
dazugehören 
#!/usr/bin/perl Perl Zukunft: Perl 5
• lebt und gedeiht
• bleibt auch wenn Perl6 kommt
Perl 6
Entwicklungsprozess
#!/usr/bin/perl
• Kaffeetasse (2001)
• RFCs (2001)
• Apocalypse + Exegese auf
perl.com (2002-...)
Perl 6
VM
#!/usr/bin/perl
• Trennung von Sprache und VM
• VM unterstützt andere
Sprachen
Python

= Ponie
Perl 6

Perl 5
Parrot
#!/usr/bin/perl Perl 6 Features
(ausgewählte)
$a = 5 | 6 | 7;

if ( $note == 5 | 6 ) {...}

if (any($a|$b) > all($x|$y|$z))


#!/usr/bin/perl Buchtipps
• Kamel-Buch
• Programming
with Perl
• Programmieren
mit Perl
• Larry Wall et.al.
• 3. Auflage (?)
#!/usr/bin/perl Buchtipps
• Lama-Buch
• Learning Perl
• Einfühung in
Perl (Win32)
• Randal L.
Schwartz
#!/usr/bin/perl Buchtipps
• Easy Perl
• ich
• CGI für
Anfängerinnen
#!/usr/bin/perl Buchtipps
• Perl Cookbook
• Perl Kochbuch
• Tom
Christiansen
und Nathan
Torkington
• Nachschlagen
#!/usr/bin/perl Buchtipps
• Object Oriented
Perl
• auch auf dt.
• Damian Conway
#!/usr/bin/perl Buchtipps
• Data Munging
with Perl
• David Cross
#!/usr/bin/perl

Viel Spass am Gerät