PRM's suggestion was "*inverting the entire regex -- i.e., instead of matching finding things that do match, exclude the things that don't ... use !~~ or some similar logic to get the strings wanted*" which IMO is an excellent idea. Your implementation didn't take the inversion into account- try this
p6 'if "hgm" *!~~* / gm | <-[d..z]> / {say "y"} else {say "n"}'