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