I would suggest not using
Crypt::PasswdMD5, but instead using
Authen::PAM, a module which allows you to avoid worrying about exactly
how and where passwords are stored and makes
customization in how passwords are authenticated easier.
It may also avoid the need for your program to
be setuid. The only disadvantage is that there are probably
some systems without PAM, where this would not be
an option, but in my experience most UNIX systems have it.
(update: no_slogan tells me that Slackware does not have PAM, for some reason.)