Post on 20-Jan-2015
description
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