my $string = "abcd-ef1"; my @matches = $string =~ /^(\w{2})?(\d)?(\w{2})?(-)?(\w{2})?(\d)?$/; my $errors = grep { !defined $_ } @matches; print "Errors is $errors\n"; ---- Errors is 1