Filter
Unter Perl gibt es eine Funktion, mit deren Hilfe man aus einem Array Elemente herausfiltert.
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.
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.