while (<PASS>) it would be better to write: while (my $curpass = <PASS>) (and remove the my $curpass = $_;-line)
(The same note goes for while(<DICT>))
it would be better if you put the close (DICT) after the while (<DICT>)-block, and use last; where you currently use close
Instead of open PASS, $passfile you should/could use: open PASS, "<:crlf", $passfile. This is a) safer, and b) it allows you to remove the chop-line (chomp will do just fine).