in reply to Re^2: adding to hash/writing to file errors
in thread adding to hash/writing to file errors

use strict; requires that you declare all variables using my in all scopes. The variable $username is used in your "login" sub, but it is not declared there, nor is it declared as a global variable. Since your call to "login" is:
login($username, %logins);

I believe you might want:

sub login { my $username = shift; my %logins = shift;

You only declare your $time variable in your "greeting" sub, but you use it in the "while" loop.

Replies are listed 'Best First'.
Re^4: adding to hash/writing to file errors
by andrew2325 (Initiate) on May 05, 2008 at 16:02 UTC
    Okay, I got rid of the errors it was returning, now the only problem is it won't add users, and only one of the default users works! I haven't a clue as to why it is doing this. Any suggestions would be appreciated.
      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.