Your first line of script is invalid. For UNIX-like system, in order to recognise your script as executable, the first two bytes of it must be "#!", and the remaining of the line must be the path to your interpreter. Thus, it looks like a comment and does not affect the execution of your program (actually, Perl reads the shebang line, but this is irrelevant now).
Swap the "#" and "!", so Perl doesn't interpret it as a negation (! %words = ( ... );). perl -MO=Deparse (use O 'Deparse') helped me to find it.