[quote=pl,04.June.2007, 23:24]Die Lösung sieht folgendermaßen aus:
while (<>) {
if (/fred/) {
print;
}
}
Kann mir nun vielleicht jemand erklären warum man hier "while" benutzt? While wiederholt die Schleife doch so oft bis sie wahr ist. Ich seh hier einfach keinen Zusammenhang! :(
Danke im Vorraus
Gruß Jakob[/quote]
Nein,
while wiederholt die Schleife solange wie der Ausdruck war ist. Solange bis der Ausdruck war ist, ist die until schleife.
Ansonsten wo steckt den dein genaues Problem?
Geht entweder jede Zeile aus den angegeben Dateien in @ARGV durch, oder STDIN. Die aktuelle Zeile wird in $_ gespeichert.
Die Regex in der if bedingung schaut ob 'fred' in $_ vorkommt, wenn ja ist die if Bedingung erfüllt und es wird:
ausgeführt. Ohne Argument gibt es $_ aus, also unsere aktuelle Zeile.
while wird solange ausgeführt wie wir noch neue Zeilen bekommen. Also alle Zeilen werden durchgearbeitet. Wenn alle zeilen abgearbeitet wurde kommt ein 'undef' und die while Schleife ist abgebrochen.
Ansonsten würde ich das Beispiel im neuen Perl etwas anders schreiben:
#!/usr/bin/perl
use strict;
use warnings;
while ( my $line = <> ) {
if ( $line =~ m/fred/ ) {
print $line;
}
}
Aber eigentlich würde ich anstatt der Regex sogar lieber ein "index" in diesem Fall nehmen. Ist Perfomanter. Soll Groß kleinschreibung egal sein, dann vorher den String mit lc klein machen und dann index nutzen.\n\n
<!--EDIT|sid burn|1180994915-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de