use strict; use warnings; my @match = map { /(2)/ ? $1 : () } 0..9; print scalar @match, "\n"; # is 1, no grep required @match = map { /(2)/ } 0..9; print scalar @match, "\n"; # is 1 @match = map { $1 if /(2)/ } 0..9; print scalar @match, "\n"; # is 10 @match = grep { defined } map { $1 if /(2)/ } 0..9; print scalar @match, "\n"; # is 10 @match = grep { length } map { $1 if /(2)/ } 0..9; print scalar @match, "\n"; # is 1 #### my ($val) = map { /^\*\s\(?([^\)]+)\)?/ } @GET_STRING; #### my $val; for (0..9) { if( /(2)/ ) { $val = $1; last; } }