17.11.2012 Aufrufe

Einführung in Perl Kommandozeileneingabe etc - IMS

Einführung in Perl Kommandozeileneingabe etc - IMS

Einführung in Perl Kommandozeileneingabe etc - IMS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Perl</strong><br />

Kommandozeilene<strong>in</strong>gabe <strong>etc</strong>.<br />

¤<br />

¤<br />

¤<br />

¤<br />

¤<br />

¤<br />

Kommandozeilene<strong>in</strong>gabe<br />

<strong>in</strong>dex-Funktion<br />

r<strong>in</strong>dex-Funktion<br />

substr-Operator<br />

grep-Operator<br />

map-Operator<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 1<br />

¢ £ ¡<br />

¤<br />

¤<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

Kommandozeilene<strong>in</strong>gabe – Bsp (1)<br />

Zeilen umdrehen<br />

% perl -e ’pr<strong>in</strong>t reverse ;’ date<strong>in</strong>ame.txt<br />

Zeilen mit Zeilennummer ausgeben<br />

% perl -e ’$i=1;while(){pr<strong>in</strong>t "$i: $_";$i++}’ date<strong>in</strong>ame.txt<br />

führenden Whitespace-Zeichen entfernen<br />

% perl -e ’while(){s/^\s+//g;pr<strong>in</strong>t;}’ date<strong>in</strong>ame.txt<br />

Datei <strong>in</strong> Großbuchstaben ausgeben<br />

% perl -e ’while(){pr<strong>in</strong>t uc $_;}’ date<strong>in</strong>ame.txt<br />

(Beispiele von Bernd Schamberger http://www.perlboard.de/perlguide/Kap20.html)<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 3<br />

¢ £ ¡<br />

¤<br />

¤<br />

¤<br />

¤<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

Kommandozeilene<strong>in</strong>gabe<br />

Ausführung von <strong>Perl</strong>-Kommandos direkt von der Kommandozeile,<br />

ohne Programmdatei<br />

siehe perlrun-Manpage<br />

perl -e ’Anweisungen’ # -e executable<br />

bei langen ‘E<strong>in</strong>zeilern’ ggf. Zeilenumbrauch mit ‘<br />

W<strong>in</strong>dows: perl -e "Anweisungen" (ggf. Str<strong>in</strong>gmarkierung<br />

‘"’ schützen<br />

Beispiel:<br />

%perl -e ’pr<strong>in</strong>t "Dies ist e<strong>in</strong> E<strong>in</strong>zeiler\n";’<br />

Dies ist e<strong>in</strong> E<strong>in</strong>zeiler<br />

# Unter W<strong>in</strong>dows:<br />

C:\> perl -e "pr<strong>in</strong>t \"Dies ist e<strong>in</strong> E<strong>in</strong>zeiler unter W<strong>in</strong>dows\n\";"<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 2<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

Kommandozeilene<strong>in</strong>gabe – Optionen<br />

-e ausführbar<br />

-w gibt Warnungen aus<br />

-n erzeugt while-Schleife um Programm<br />

-p wie -n mit zusätzlicher pr<strong>in</strong>t $ Funktion <strong>in</strong> Schleifenblock<br />

-l entfernt<br />

¥ n vorübergehend<br />

-i bearbeitet Dateien, die durch e<strong>in</strong>gelesen werden,<br />

wenn Extension gegeben, erzeugt es Backup-Datei<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 4<br />

¦<br />

§<br />

¥ ’


¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

Kommandozeilene<strong>in</strong>gabe – Bsp (2)<br />

% perl -p -e ’$_ = uc $_;’ test.txt<br />

Vergleiche<br />

while () {<br />

$_ = uc $_;<br />

pr<strong>in</strong>t;<br />

}<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 5<br />

¢ £ ¡<br />

¤<br />

¤<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

<strong>in</strong>dex-Funktion (1)<br />

f<strong>in</strong>det erstes Match von Substr<strong>in</strong>g<br />

gibt nullbasierten Integer-Wert zurück für Position des 1.<br />

Buchstabens des Substr<strong>in</strong>gs<br />

wenn ke<strong>in</strong> Match gefunden wird: -1<br />

Syntax:<br />

$wo = <strong>in</strong>dex($grosser str<strong>in</strong>g, $substr<strong>in</strong>g);<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 7<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

Noch e<strong>in</strong> Beispiel<br />

%$ perl -p -i.bak -w -e ’s/Randall/Randal/g’ fred*.dat<br />

Vergleiche<br />

# /usr/b<strong>in</strong>/perl -w<br />

@ARGV = glob "fred*.dat";<br />

while () {<br />

s/Randall/Randal/g;<br />

pr<strong>in</strong>t;<br />

}<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 6<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

<strong>in</strong>dex-Funktion - Beispiel<br />

$wo = <strong>in</strong>dex ("Abrakadabra", "abra");<br />

pr<strong>in</strong>t "$wo\n";<br />

:> # A b r a k a d a b r a<br />

:> # 0 1 2 3 4 5 6 - - - -<br />

$wo = <strong>in</strong>dex ("abrakadabra", "arba"); # Tippfehler bei ’arba’<br />

pr<strong>in</strong>t "$wo\n";<br />

:>-1<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 8


¢ £ ¡<br />

¤<br />

¤<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

<strong>in</strong>dex-Funktion (2)<br />

optionaler 3. Parameter: Suchbeg<strong>in</strong>n<br />

Syntax:<br />

$wo = <strong>in</strong>dex($grosser str<strong>in</strong>g, $substr<strong>in</strong>g, Suchbeg<strong>in</strong>n);<br />

Default für Suchbeg<strong>in</strong>n = 0<br />

meist <strong>in</strong> Schleife e<strong>in</strong>gebaut<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 9<br />

¢ £ ¡<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

r<strong>in</strong>dex-Funktion<br />

f<strong>in</strong>det das letzte Vorkommnis e<strong>in</strong>es Suchstr<strong>in</strong>gs<br />

Syntax:<br />

$wo = r<strong>in</strong>dex($grosser str<strong>in</strong>g, $substr<strong>in</strong>g, Suchbeg<strong>in</strong>n);<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 11<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

$wo =0;<br />

$n = 0;<br />

<strong>in</strong>dex-Funktion (2) - Bsp<br />

while ($wo !~ -1){<br />

$wo = <strong>in</strong>dex ("abrakadabra", "ab", $wo+$n);<br />

pr<strong>in</strong>t "$wo\n" ;<br />

$n=1;<br />

}<br />

:>0 # a b r a k a d a b r a<br />

- -<br />

:>7 # a b r a k a d a b r a<br />

- -<br />

:>-1 # nicht (mehr) gefunden<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 10<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

r<strong>in</strong>dex-Funktion Beispiel<br />

$wo = length "abrakadabra";<br />

$n = 0;<br />

while ($wo !~ -1){<br />

$wo = r<strong>in</strong>dex ("abrakadabra", "ab", $wo-$n);<br />

pr<strong>in</strong>t "$wo\n" ;<br />

$n=1;<br />

}<br />

:>7 # a b r a k a d a b r a<br />

--<br />

:>0 # a b r a k a d a b r a<br />

- -<br />

:>-1 # nicht (mehr) gefunden<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 12


¢ £ ¡<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

substr-Operator (1)<br />

ermittelt Teil (= Substr<strong>in</strong>g) e<strong>in</strong>es größeren Str<strong>in</strong>gs<br />

zwei Argumente (+ zwei optionale Argumente)<br />

– Str<strong>in</strong>g<br />

– Startposition<br />

positive Zahl<br />

gezählt<br />

negative Zahl<br />

gezählt<br />

– Länge (optional)<br />

– Ersetzung<br />

¡<br />

Zeichenposition vom Anfang des Str<strong>in</strong>gs<br />

¡<br />

Zeichenposition vom Ende des Str<strong>in</strong>gs<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 13<br />

¢ £ ¡<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

substr-Operator (2)<br />

Verknüpfung von substr und <strong>in</strong>dex<br />

$langer_str<strong>in</strong>g = "Fred J. Feuerste<strong>in</strong>";<br />

$teil = substr ($langer_str<strong>in</strong>g, <strong>in</strong>dex ($langer_str<strong>in</strong>g, "s"));<br />

# ergibt "ste<strong>in</strong>"<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 15<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

substr-Operator (1) – Bsp<br />

$teil = substr ("Fred J. Feuerste<strong>in</strong>", 8, 5); # ergibt "Feuer"<br />

$teil = substr ("Fred J. Feuerste<strong>in</strong>", 13, 1000); # ergibt "ste<strong>in</strong>"<br />

$teil = substr ("Fred J. Feuerste<strong>in</strong>", 13); # ergibt "ste<strong>in</strong>"<br />

$teil = substr ("Fred J. Feuerste<strong>in</strong>", -3); # ergibt "e<strong>in</strong>"<br />

$teil = substr ("Fred J. Feuerste<strong>in</strong>", -3, 2); # ergibt "ei"<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 14<br />

¢ £ ¡<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

substr-Operator (3)<br />

ausgewählter Teil kann verändert werden<br />

muss dazu <strong>in</strong> Variable stehen<br />

$str<strong>in</strong>g = "Fred J. Feuerste<strong>in</strong>";<br />

substr ($str<strong>in</strong>g, 0, 7) = "Wilma"; # ersetzt<br />

# Fred J.<br />

# 0123456<br />

# durch<br />

# Wilma<br />

pr<strong>in</strong>t "$str<strong>in</strong>g\n"; # ergibt:<br />

# :>Wilma Feuerste<strong>in</strong><br />

Oder:<br />

$geloeschter_str<strong>in</strong>g = substr ($str<strong>in</strong>g, 0, 7,"Wilma"); # Fred J.<br />

pr<strong>in</strong>t "$str<strong>in</strong>g\n"; # Wilma Feuerste<strong>in</strong><br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 16


¢ £ ¡<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

substr-Operator (4)<br />

mittels B<strong>in</strong>dungsoperator = Operation auf Teilstr<strong>in</strong>g beschränken<br />

$str<strong>in</strong>g = "Fred J. Feuerste<strong>in</strong>";<br />

substr ($str<strong>in</strong>g, -10) =~ s/e/E/g;<br />

pr<strong>in</strong>t "$str<strong>in</strong>g\n"; # ergibt<br />

# :>Fred J. FEuErstE<strong>in</strong><br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 17<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

my @ungerade_zahlen;<br />

foreach (1..1000) {<br />

if ($_ % 2) {<br />

push (@ungerade_zahlen, $_)<br />

}<br />

}<br />

¤<br />

dasselbe mit grep:<br />

grep-Operator (2)<br />

my @ungerade_zahlen = grep { $_ % 2} (1..1000);<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 19<br />

¢ £ ¡<br />

¤<br />

¤<br />

¤<br />

¤<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

grep-Operator (1)<br />

filtert Elemente aus e<strong>in</strong>er Liste<br />

Syntax: Operator – Block mit $ – Liste<br />

für jedes Listenelement wird Block 1x ausgewertet<br />

vgl. Unix-Hilfsprogramm grep<br />

Beispiel: E<strong>in</strong>lesen von ungeraden Zahlen <strong>in</strong> Array<br />

konventionell:<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 18<br />

¢ £ ¡<br />

¤<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

grep-Operator (3)<br />

zeilenweises E<strong>in</strong>lesen aus Datei<br />

hier: groß- und kle<strong>in</strong>schreibungsunabhängige Suche nach dem<br />

Wort <strong>Perl</strong><br />

liest Zeilen mit Match <strong>in</strong> Array zeilen suche e<strong>in</strong> (Mit<br />

Newl<strong>in</strong>ezeichen)<br />

open (FILE, "test.txt") or die "$!";<br />

my @zeilen_suche = grep { /\bperl\b/i } ;<br />

¤<br />

wenn Filter e<strong>in</strong>facher Ausdruck, weitere Vere<strong>in</strong>fachung<br />

my @zeilen_suche = grep /\bperl\b/i, ;<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 20


¢ £ ¡<br />

¤<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

map-Operator (1)<br />

wandelt Elemente aus e<strong>in</strong>er Liste um<br />

analoge Syntax zu grep: Operator – Block mit $ – Liste<br />

Beispiel: Lösche Muster<br />

¥ <strong>in</strong>dex{p}{Chomsky}<br />

¥ <strong>in</strong>dex{l}{German}<br />

¥ <strong>in</strong>dex<br />

¥ {[pl]<br />

¥ }<br />

¥ {[<br />

¥ }]*<br />

¥ }<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 21<br />

¢ £ ¡<br />

¤<br />

¤<br />

¤<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

grep versus map (1)<br />

grep gibt Wert von $ zurück, wenn Block wahr ist<br />

map ersetzt $ mit letztem Ausdruck aus Block<br />

Beispiele<br />

@ungerade_zahlen = grep {"Tautologie"} (1..5);<br />

foreach $x (@ungerade_zahlen){<br />

pr<strong>in</strong>t "$x\n";<br />

}<br />

:>1<br />

:>2<br />

:>3<br />

:>4<br />

:>5<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 23<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

open (FILE, "test.txt") or die "$!";<br />

map-Operator (2)<br />

map { pr<strong>in</strong>tf "%s\n", &delete_multi_<strong>in</strong>dex($_) } ;<br />

sub delete_multi_<strong>in</strong>dex {<br />

chomp( my $v = $_[0]);<br />

}<br />

¤<br />

$v =~ s/\\<strong>in</strong>dex\{[pl]\}\{[^\}]*\}//g;<br />

return $v ;<br />

alternativ (und kürzer):<br />

E<strong>in</strong>schub: Zeilene<strong>in</strong>gabe<br />

:> perl -l -p -e ’s/\\<strong>in</strong>dex\{[pl]\}\{[^\}]*}//g’ test.txt<br />

:><br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 22<br />

¢ £ ¡<br />

<strong>IMS</strong> Heike Z<strong>in</strong>smeister<br />

grep versus map (2)<br />

@ungerade_zahlen = map {"Tautologie"} (1..5);<br />

foreach $x (@ungerade_zahlen){<br />

pr<strong>in</strong>t "$x\n";<br />

}<br />

:>Tautologie<br />

:>Tautologie<br />

:>Tautologie<br />

:>Tautologie<br />

:>Tautologie<br />

<strong>Perl</strong>, 19.12.03 Kommandozeilene<strong>in</strong>gabe 24

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!