Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003

Preview:

DESCRIPTION

Vorstellung der Programmiersprache Perl auf drei Ebenen: für Programmier-Anfänger, für Fortgechrittene und für Profis. inkl. Buchtipps zu Perl. Ein Vortrag den ich ursprünglich am Chaos Communication Congress 2000 in Berlin gehalten habe, hier in der Version von 2003.

Citation preview

PerlPerldie die

TaschenkettensägeTaschenkettensäge unter denunter den

ProgrammiersprachenProgrammiersprachen

Vortrag von Brigitte Jellinek, 18C319C3if 2003

InhaltInhalt

• Perl für Anfängerinnen

InhaltInhalt

• Perl für Anfängerinnen• Perl für Fortgeschrittene

InhaltInhalt

• Perl für Anfängerinnen• Perl für Fortgeschrittene

– und Umsteiger

InhaltInhalt

• Perl für Anfängerinnen• Perl für Fortgeschrittene

– und Umsteiger

• Perl für Profis

InhaltInhalt

• Perl für Anfängerinnen• Perl für Fortgeschrittene

– und Umsteiger

• Perl für Profis• Die Perl Community

InhaltInhalt

• Perl für Anfängerinnen• Perl für Fortgeschrittene• Perl für Profis• Die Perl Community• Perl Zukunft

InhaltInhalt

• Perl für Anfängerinnen• Perl für Fortgeschrittene• Perl für Profis• Die Perl Community• Perl Zukunft• Buchtipps

Perl für AnfängerPerl für Anfänger

x Gründe warum man Perl als erste Programmiersprache lernen sollte

Perl für AnfängerPerl für Anfänger

Wer programmieren lernt, hat ein Recht auf Spass

Mehr Spass durch Skript-Mehr Spass durch Skript-SprachenSprachen

• easy things should be easy– keine sinnlose (oo-)Bürokratie

print "Hallo Welt, wie gehts?";

Mehr Spass durch Skript-Mehr Spass durch Skript-SprachenSprachen

• interpretiert – schnelle Rückmeldung

Mehr Spass durch Skript-Mehr Spass durch Skript-SprachenSprachen

• 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-Mehr Spass durch Skript-SprachenSprachen

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>

Perl für AnfängerPerl für Anfänger

Wer programmieren lernt, hat ein Recht auf

coole Beispiele

cool? uncool?cool? uncool?

• uncool– n! berechnen– DOS Programm– ewig

programmieren, um ein Fenster zu erzeugen

• cool– bunt– interaktiv– so gut wie die

Profis

• heute: Web

Mehr Spass durch Mehr Spass durch Web-ProgrammierungWeb-Programmierung

• Counter• Gästebuch• Postkarte• E-Mail schicken• Fotoalbum• Abstimmung

Web-ProgrammierungWeb-Programmierung

• HTML• Warnung vor Javascript• Webspace mit ...• Perl, PHP oder Visual Basic

Perl für AnfängerPerl für Anfänger

Wer programmieren lernt, sollte dafür nicht ein Vermögen

ausgeben müssen

Perl ist gratisPerl ist gratis

• Larry Wall + die Gefährten

Perl ist gratis + überallPerl ist gratis + überall

• auf allen UNIXen, Mac OS X– which perl

• Windows: – ActiveState (mit vielen modulen)– XAMPP (mit apache,mysql,php)

• MacPerl

• Larry Wall + die Gefährten• Artistic License

Perl für AnfängerPerl 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 FortgeschrittenePerl für Fortgeschrittene

x Gründe, warum Leute die schon programmieren können Perl lernen sollten

Weniger Aufwand, Weniger Aufwand, mehr Wirkungmehr Wirkung

Lines of Code pro Function

Point

Lines of Code pro Zeile Perl

Basic Assembly 575 11,5Macro Assembly 400 8,0C 225 4,5Cobol 74 (Cobol I) 220 4,4FORTRAN 210 4,2Cobol 85 (Cobol II) 175 3,5Pascal 160 3,2C++ 80 1,6Java 80 1,6Oracle 60 1,2

Perl 50 1,0JavaScript 50 1,0Shell Script 50 1,0

veraltet, aber trotzdem beeindruckend

kenn ich schonkenn 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";

}

kenn ich schonkenn 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;

kenn ich schonkenn ich schon

• Assoziative Arrays: awk

$ring{'Gandalf'} = "Narya";$ring{'Galadriel'} = "Nenya";$ring{'Elrond'} = "Velia";$ring{'Frodo'} = "Ash Nazgh";

kenn ich schonkenn 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";

kenn ich schonkenn ich schon

• Dateien + Ordner: shell

Von x zu PerlVon x zu Perl

Von PASCAL zu PerlVon PASCAL zu Perl

BEGIN

END

BEGIN Pascal;END Pascal;

Von PASCAL zu PerlVon PASCAL zu Perl

{

}

BEGIN Pascal;END Pascal;

Von PASCAL zu PerlVon PASCAL zu Perl

• Syntax { } statt BEGIN END• nie wieder compilieren• Weniger Aufwand,

grössere Wirkung

BEGIN Pascal;END Pascal;

Von C zu PerlVon 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[]

Von C++/Java zu PerlVon 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

{

public static void main( String args[])

{

System.out.println(

"Hello World");

}

}

print "Hello World";

Von Javascript zu PerlVon Javascript zu Perl

• zur Abwechslung:eine Sprache die funktioniert

• Variablen haben ein Sigil$a @b %c

• Typen gleich

Von PHP zu PerlVon PHP zu Perl

• gratuliere! – du bist schon fast daSyntax TypenSigil (~Änderung)

• grosse Projekte – mit Namespaces *

• viele Module– mit CPAN

• SysAdmin, DataMunging, Kommandozeile

<?php

// gehört zu Foo

$a = 10;

$b = 20;

go();

// gehört zu Bar

$bar_a = 42;

$bar_b = 23;

bar_go();

?>

package Foo;$a = 10;$b = 20;

go();

package Bar;$a = 42;$b = 23;go();

print $Foo::a;

print $Foo::b;

Foo::go();

Neu in Perl: HashNeu in Perl: Hash

• nicht was ihr denkt• „assoziatives Array“• Index nicht Integer sondern String

0 1 2 3Narya Nenya Vilya Ash Nazgh

0 1 2 3

0 1 2 3

Narya Nenya Vilya Ash Nazgh

Gandalf Galadriel Elrond Frodo

Neu in Perl: RegExpNeu in Perl: RegExp

• oder „pattern matching“

• Text Ersetzen• Muster in Text finden

• ein paar Sonderzeichenm/^Am Anfang war/ m/\d+ EURO/

Neu in Perl: RegExpNeu 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!";

}

Module, Module, ..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

Module installierenModule 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 FortgeschrittenePerl für Fortgeschrittene

4 Gründe, warum Leute die schon programmieren können Perl lernen sollten– Ähnlich wie ....– Pattern Matching– Hashes– Viele Module

Perl AnwendungPerl Anwendung

(typische)

Perl Anwendung: Perl Anwendung: CGICGI

• 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: Perl Anwendung: System-System-AdministrationAdministration

• 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, Sound, TieRegistry

Perl Anwendung: Perl Anwendung: Data MungingData Munging

• umformatieren• Ziel: Text, HTML, SQL, XML,...• Quelle: jedes kranke Format• Werkzeuge

– Pattern Matching– binär: pack / unpack– Parse::RecDescent (yacc++)

Perl für ProfisPerl für Profis

x Gründe, warum Profis an Perl Freude haben werden

TMTOWTDITMTOWTDI

There‘s more than one way to do it

= Unglaubliche Flexibilität der Syntax

TMTOWTDITMTOWTDI

print "hallo"; # funktion ohne klammerprint ("hallo"); # funktion mit klammer

# auch mehrere funktionen:

reverse sort keys %hash;

TMTOWTDITMTOWTDI

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 Magie: Programme werden immer kürzerwerden immer kürzer

• flexible Schreibweise• Kurzschreibweise• unsichtbare Variable

Magie: Programme werden Magie: Programme werden immer kürzerimmer kürzer

# Datei öffnen (mit Fehlerbehandlung)

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

if ( not $OK ) { die "Problem beim lesen der Datei: $!";}

Magie: Programme werden Magie: Programme werden immer kürzerimmer kürzer

# Datei öffnen (mit Fehlerbehandlung)

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

unless ( $OK ) { die "Problem beim lesen der Date: $!";}

unless ist if not

Magie: Programme werden Magie: Programme werden immer kürzerimmer kürzer

# Datei öffnen (mit Fehlerbehandlung)

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

die "Problem beim lesen der Date: $!" unless $OK;

Bedingung als "Nachsatz"

Magie: Programme werden Magie: Programme werden immer kürzerimmer kürzer

# Datei öffnen (mit Fehlerbehandlung)

open(HANDLE, "datei.txt") or die "Problem beim lesen der Date: $!"

Wie im Deutschen: friss oder stirb!

Die unsichtbare VariableDie unsichtbare Variablewhile ( $zeile = <DATA> ) {

chomp $zeile;

$zeile =~ s/dies/das/;

print $zeile;

}

$zeile ist eine ganz normale Variable

Unsichtbare VariableUnsichtbare Variablewhile ( $_ = <DATA> ) {

chomp $_;

$_ =~ s/dies/das/;

print $_;

}

$_ ist eine besondere Variable...

Unsichtbare VariableUnsichtbare Variablewhile ( <DATA> ) {

chomp;

s/dies/das/;

print;

}

$_ kann unsichtbar werden!

Sind die dennSind die dennvöllig wahnsinnig?völlig wahnsinnig?

JaJa

Obfuscated Perl ContestObfuscated 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";#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

Damian ConwayDamian Conway

• Perl Hacker• Beispiel für weiteren Perl

Wahnsinn

Damian ConwayDamian ConwayA less positional programming language

There is no reason why programming languages could not also use inflexions, rather than position, to denote lexical roles."

"

Damian ConwayDamian ConwayA less positional programming language

There is no reason why programming languages could not also use inflexions, rather than position, to denote lexical roles.

Damian ConwayDamian Conway

use Lingua::Romana::Perligata;

adnota Illud Cribrum Eratothenismaximum 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

Damian ConwayDamian 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

Perl CommunityPerl Community

• Larry Wall• Perl 6 Design Team + Parrot Team• Perl Foundation, siehe perl.org• PerlMongers = Usergroups pm.org • perlmonks.org = Forum

Perl CommunityPerl Community

• Konferenzen– Dt. Perl Workshop– O‘Reilly Conference– YAPC

VermeidenVermeiden

• Manche Bewohner von Newsgroups

• Uralte CGI-Skripts– statt „Matts Script“– nms

Perl für ProfisPerl für Profis

3 Gründe warum Profis an Perl Freude haben werden– flexibilität– Kurzschreibweise– zu den Wahnsinnigen dazugehören

Perl Zukunft: Perl 5Perl Zukunft: Perl 5

• lebt und gedeiht• bleibt auch wenn Perl6 kommt

Perl 6 Perl 6 EntwicklungsprozessEntwicklungsprozess

• Kaffeetasse (2001)• RFCs (2001)• Apocalypse + Exegese auf

perl.com (2002-...)

Perl 6 Perl 6 VMVM

• Trennung von Sprache und VM• VM unterstützt andere Sprachen

Parrot

Python

Perl 6

Perl 5

= P

onie

Perl 6 FeaturesPerl 6 Features

(ausgewählte)$a = 5 | 6 | 7;

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

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

BuchtippsBuchtipps

• Kamel-Buch• Programming

with Perl• Programmieren

mit Perl • Larry Wall et.al.• 3. Auflage (?)

BuchtippsBuchtipps

• Lama-Buch• Learning Perl• Einfühung in Perl

(Win32) • Randal L.

Schwartz

BuchtippsBuchtipps

• Easy Perl• ich• CGI für

Anfängerinnen

BuchtippsBuchtipps

• Perl Cookbook• Perl Kochbuch • Tom Christiansen

und Nathan Torkington

• Nachschlagen

BuchtippsBuchtipps

• Object Oriented Perl

• auch auf dt.• Damian Conway

BuchtippsBuchtipps

• Data Munging with Perl

• David Cross

Viel Spass am GerätViel Spass am Gerät

Recommended