One of the quickest ways to debug Perl code is to start placing print statements near where you are having trouble.
For looking at the contents of array and hash variables, use Data::Dumper;. For example, to inspect values passed into a sub:
print Dumper(\@_);
Taking another pass through your code, I see a couple of unusual things:
my %logins = shift;
Inside a sub, shift will remove a single element from the @_ array, not an entire hash as you may expect. See for yourself with:
print Dumper(\%logins);
You may want to consider passing hashes by reference (see perlreftut).
Another oddity is:
if ( $pass <=> $logins{$username} ) {
What are you trying to accomplish there?
Another recommendation is to take advantage of your modular approach by testing your individual subs. |