Stichwortliste zum Vortrag "Perl - Eine Programmiersprache der vierten Generation"
well, there is more than one way to do it ...
- Einordnung
- Compilierte und Interpretierte Sprachen, Virtuelle Maschine, Java, Skriptsprachen, Shell, Basic
- Versionen: unter Perl 5 machen wirs nicht mehr
- Kernsprache + Module
- Bestandteile
- /usr/local/bin/perl (der interpreter)
- /usr/local/lib/perl5/.... (library modules, .pm = Perl Module)
- Skripte: lala.pl oder lala.cgi
- erste Zeile:
#!/usr/local/bin/perl -w
- use Module
- require filename
- help: perldoc oder man
- /usr/local/perl5/... (sourcen der libraries)
- Syntactic Details and Small Examples
- $scalar, %hash, @list, &function, FILEHANDLE
1 #/!usr/local/bin/perl -w
2
3 $element_54 = $list[54];
4 if(! defined $element_54) {print "gibts gar nicht!\n"; }
6
7 @splice_54 = @list[54]; # ist ein "list slice" von 54..54
8 print "es hat ", scalar(@splice_54), " elemente\n";
9
10 for($x=1;$x<10;$x++) { print $x, "\n"; }
11
12 foreach $x ( @ARGV ) { print "$x\n"; }
13
14 foreach $x (sort keys %ENV) { print $x, $ENV{$x}, "\n"; }
15
16 while( ($k, $v) = each %ENV ) { print "$k=$v\n"; }
17
18 if(`wc $0` =~ /(\d+)\s+(\d+)\s+(\d+)/){print "dieses script hat $3 zeichen und $2 zeilen\n";}
- Datentypen
- Skalare
- Strings
- "lala\n" ne 'lala', 'lala' eq ("la" x 2)
- Zahlen
- 1, -1, 12.3, 1e4, 100 == 0x64, 0100 == 64
- true && false: 0 ist false, der leere string ist false
- defined & undefined
- undef ist ein leerer string
- Arrays sind Listen sind Arrays
- Hashes (assoziative Arrays)
- Objekte
- Sonstige: File-Handles, Module, Funktionen
- Operationen
- Standards von C
- Reguläre Ausdrücke
- Unix Syscalls: $ret = system("ls");
- Unix Shells (%ENV, `ls`)
- Einbettung von/in C
- Oddments
- Defaults und komische Variablen: $_ $@ @_;
- dynamisches scoping mit local()
- statisches scoping mit my ()
- parameter werden by-reference uebergeben, das my ($x) = @_ kopiert sie
dann.
- alter code benutzt typeglobs, weil references neu sind
- Namespaces über Symbol Tables, die man prinzipiell auch auslesen kann. *glob.
- while(<STDIN>) { print; } ABER
if($_ = <STDIN>) { print; }
- $one_line = <STDIN> ABER
@all_lines = <STDIN>
- print while (<>) , weil <> ein synomym für <ARGV> ist, welches wiederum "magisch" ist
- while (<*.c>) { chmod 0644, $_; }, aber über die Shell, daher space-probleme. besser: readdir
- References
- $s = \$lala, $l = \@lala, $h = $\%lala; $$s, $l->[1], $h->{'foo'}
- "Vierte Generation"?
- Schwerpunkt: Textverarbeitung und System Calls
- "Duct Tape" - verbindung und verknotung von 3d-generation-programmen
- Mächtige Primitive
- Module, die Operationen auf Applikations-Level zur Verfügung stellen
- Komplexe Anbindungen (Datenbank-Tabellen über Ties etc.)
- Geschwindigkeit, Optimierung, Debuggung
- Wer ein perl-Skipt debuggen will, muss sich drei Punkte merken:
- das "-w" -Flag,
- das "-w" -Flag, und nicht zuletzt
- das "-w" -Flag.
- Sicherheit: Taint-Check
- Es gibt einen Profiler: perl -d:DProf lala.pl; dprofpp
- Wann ist Perl die angemessene Sprache?
- Wenn eine Aufgabe zu komplex für ein sh/csh/ksh/bash/sed/awk-Skript wird
- Wenn viel gesucht und ersetzt wird
- Wenn viele Files zu begutachten sind (find)
- CGI-Skripte
- Wenn ein Programm Betriebssystem-unabhängig sein soll
- Installieren einer neuen Library "foo":
-
cp foo.tar.gz /usr/local/perl5
cd /usr/local/perl5
gunzip foo.tar.gz
tar xf foo.tar
cd foo
perl Makfile.pl
make
make test
make install
- Was leistet das C-Interface?
- Wenn ein Kommandozeileninterface für eine C-Library benötigt wird
- Wenn ein C-Programm eine Skriptsprache bekommen soll
- Die Perllib
- (wenn ich noch Zeit habe dafür)
Beispiele
Hello
perl -e 'print "hello, world!\n"'
bzw.
#!/usr/local/bin/perl
print "hello, world\n";
aber nicht
#!/usr/local/bin/perl
print hello, world\n;
und auch nicht
#!/usr/local/bin/perl
print 'hello, world\n';
Directory
opendir FOO, '.';
@names = readdir FOO;
closedir FOO
print @names;
print @names, "\n";
print join(' ', @names), "\n";
print join(' ', sort @names), "\n";
print join(' ', reverse sort @names), "\n";