in reply to passwords revisited

If you look up crypt in perlfunc, you'll see this:
When verifying an existing encrypted string you should use the encrypted text as the salt (like `crypt($plain, $crypted) eq $crypted'). This allows your code to work with the standard `crypt' and with more exotic implementations.
You have have used substr in your code to cut off just the salt. I don't have access to any FreeBSD box, so I can't test if this is really the problem, but I figured I should throw this in anyway just in case.