Filter![Perl](/cgi-bin/perl/counter.pl?EP/grep.htm)
Unter Perl gibt es eine Funktion, mit deren Hilfe man aus einem Array Elemente herausfiltert.
![Seitenanfang](../Pictures/more/top.gif)
grep Beschreibung und Beispiele
grep ist ein Operator, der aus einem Array die Elemente zurückliefert, die auf einen angegebenen Ausdruck passen. Die Syntax lautet @gefiltert=grep(Ausdruck, @array). Dazu ein Beispiel: Es sollen alle Wörter mit vier Buchstaben aus einem Array gefiltert werden:
@woerter=("Auto", "Baum", "Hahn", "Hund", "Kamel", "Frosch", "Mund", "Kamin");
@vierBuchstaben = grep(length($_)==4, @woerter);
print (join(", ", @vierBuchstaben));
Auto, Baum, Hahn, Hund, Mund
- Der linke Teil des grep-Operators ist also ein Ausdruck der wahr oder falsch zurückliefern muss. Der rechte Teil ist das zu filternde Array.
Man kann im Ausdruck des grep-Operators auch einen regulären Ausdruck angeben - zum Beispiel, um alle Wörter zu bekommen, in denen eine Zahl enthalten ist:
@woerter=("Atari", "C64", "Pentium", "Amiga500");
print join ", ", grep /\d/ , @woerter;
C64, Amiga500
- Man kann auf die Klammern verzichten.
- Der reguläre Ausdruck bezieht sich auf $_, deshalb kann man ihn auch weglassen.
![Seitenanfang](../Pictures/more/top.gif)
grep und s///
Man kann grep also auf ganze Arrays anwenden. Hier ist ein Beispiel von recht exotischer Art:
@woerter=("Atari", "C64", "Pentium", "Amiga500");
print join(", ", grep s/\d//g , @woerter)."\n";
print join(", ", @woerter);
C, Amiga
Atari, C, Pentium, Amiga
- Man macht hier gleich zwei Dinge auf enmal: Zum einen werden alle Ziffern aus den Elementen des Arrays gelöscht. Zugleich werden die Arrayelemente, die verändert wurden, weitergegeben.
- Die Weitergabe an join findet erst nach der Überprüfung des Ausdrucks statt.