populate PERL Hash

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:

<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 chars 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";
}

</code>

I get the below error:

<code>
Global symbol "%envPropertiesHash" requires explicit package name at first.pl line 5.
Global symbol "$envPropertiesHash" requires explicit package name at first.pl line 22.
Global symbol "%envPropertiesHash" requires explicit package name at first.pl line 31.
Execution of first.pl aborted due to compilation errors.

</code>

Please CODE tags

<CODE>
</CODE>

Need to explicitly mention the variable as

my %envPropertiesHash;

when you use the strict pragma, and you should, all lexical variables have to be declared with 'my' within their intended scope. If you don't understand what that means maybe some reading will help:

perlsub - perldoc.perl.org