uandme2k2 has asked for the wisdom of the Perl Monks concerning the following question:

Hello I am new to perl and learning ...can you please explain why am i getting this error...as myHash is defined right above the code and I think it should be avilable in the sub function. Here is my code:
#!/usr/bin/perl use warnings; use strict; %myHash=(); sub populateHash { my $MY_FILE="file.properties"; open my $PFILE, '<', $MY_FILE or die "Cannot open '$MY_FILE' $!"; LINE: while (<$PFILE>) { # now read the line and remove all white spaces, tab and new line char +s or any trailing spaces $_ =~ s/\s+$//; next LINE if (/^\s*#/); # ignore commented lines next LINE if (/^$/); # ignore null lines my $n=substr($_,0,index($_,'=')); my $v=substr($_,index($_,'=')+1); $myHash->{$n}=$v; } close $PFILE; } &populateHash(); while ( my ($key, $value) = each(%myHash) ) { print "From myHash --> $key => $value\n"; }
I get the below error:
Global symbol "%envPropertiesHash" requires explicit package name at f +irst.pl line 5. Global symbol "$envPropertiesHash" requires explicit package name at f +irst.pl line 22. Global symbol "%envPropertiesHash" requires explicit package name at f +irst.pl line 31. Execution of first.pl aborted due to compilation errors.

Replies are listed 'Best First'.
Re: Populate Hash
by Corion (Patriarch) on Jul 27, 2009 at 14:02 UTC
    Global symbol "%envPropertiesHash" requires explicit package name at f +irst.pl line 5.

    There is no way you might be getting that error from the code you posted. Either you are running a different file, or you did not post the code you are running.

    A reply falls below the community's threshold of quality. You may see it by logging in.
Re: Populate Hash
by markkawika (Monk) on Jul 27, 2009 at 16:37 UTC
    It's because you use the hash %myHash as a global the very first time it's mentioned. You need to declare it as a local variable with:
    my %myHash = ();
    Also, you declare it as a hash but then use it as a scalar: $myHash->{$n}=$v; uses the $myHash scalar variable, not the %myHash hash variable.