#!/usr/bin/perl
die
Taschenkettensäge
unter den
Programmiersprachen
• interpretiert
– schnelle Rückmeldung
Mehr Spass durch
Skript-Sprachen
#!/usr/bin/perl
$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
$a[ 0 ] = 42;
$a[ 1 ] = "zweiundvierzig";
$a[ 2 ] = 3.141;
}
#!/usr/bin/perl kenn ich schon
• Patterns: vi, grep, egrep, sed
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
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
// 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
• Text Ersetzen
• Muster in Text finden
if ( $text =~ m/Zauberstab/ ) {
}
#!/usr/bin/perl Module, Module, ..
• 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
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
$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)
if ( not $OK ) {
die "Problem beim lesen der Datei: $!";
}
Magie: Programme
werden immer kürzer
#!/usr/bin/perl
# Datei öffnen (mit Fehlerbehandlung)
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)
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;
• 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
= Ponie
Perl 6
Perl 5
Parrot
#!/usr/bin/perl Perl 6 Features
(ausgewählte)
$a = 5 | 6 | 7;
if ( $note == 5 | 6 ) {...}