è simile nello spirito, ma non uguale, a grep(1) e ai suoi congiunti. In particolare, non è limitata all'uso di espressioni regolari.
Valuta il BLOCCO o l'ESPR per ogni elemento
della LISTA (assegnando localmente a $_ ogni
elemento) e restituisce una valore di lista costituito
da quegli elementi per i quali la valutazione
dell'espressione restituisce il valore vero. In un
contesto scalare, restituisce il numero di volte
che l'espressione ha restituito valore vero.
@pippo = grep(!/^#/, @pluto); # spazza via i commenti
o equivalentemente,
@pippo = grep {!/^#/} @pluto; # spazza via i commenti
Va notato che $_ è un alias del valore
dell'elemento della lista, quindi può essere
usato per modificare elementi della LISTA. Benché
utile e supportato, può causare risultati
bizzarri se gli elementi della LISTA non sono variabili.
Allo stesso modo, grep restituisce alias agli elementi
della lista originale, in modo molto simile a quello in cui
il ciclo for costruisce alias per gli elementi della lista.
Per questa ragione modificare un elemento della lista
restituita da grep (ad esempio in un foreach, in un
map o in un altro grep) di fatto modifica l'elemento
della lista originale. è qualcosa che di solito si
dovrebbe evitare scrivendo codice chiaro.
Consultate anche map per una lista composta dai risultati del BLOCCO o dell'ESPR.