Yes, this will certainly work! I made an implicit assumption that there were very few check words (perhaps just 3) to be checked against perhaps a potentially very big list of other words. So I restricted my hash to be only the 3 checked words instead of all_words. But I think your code is just fine.
I don't think it is necessary to beat this thing to death in all its variations. I don't know whether I actually succeeded or not, but I was attempting to address the OP's comments about searching the internet for hours and copying code that he didn't understand and that didn't work for him.
I avoided map{} and grep{} (which are special kinds of foreach loops) and attempted to write very simple loops in the hope that the OP will take the time to understand them. I added a whole lot of verbiage in an attempt to explain an example of the algorithmic thought process. I am hoping that the OP learned not only a solution to this current problem, but also stuff that is helpful to future problems.