http://www.perlmonks.org?node_id=657139

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

Hi all.

I wrote a simple test file (test.txt):

Lateur Bart 97 Pierce Jerrad 96 Unknown planetscape 101 Miller Katie 86


Which I then read via the following perl program:

use warnings; use strict; use Data::Dumper; my %hash = (); my ($lname, $fname, $score); while( <> ) { ( $lname, $fname, $score ) = split; $hash{$lname}{$fname} = $score; } print Dumper(\%hash);


Since I am currently reading the 1st edition of 'Intermediate Perl' aka 'Perl Objects, References, and Modules', I am trying to understand how to read/interpret the output provided by Data::Dumper. If wanted to display the score each monk received or just their last name, how would I accomplish that? I tried...

print %{ $hash{$lname}{$fname}{$score} }\n";


...but noticed the following complaints:

C:\Perl\bin>perl test16.pl test.txt Global symbol "$lname" requires explicit package name at test16.pl lin +e 12. Global symbol "$fname" requires explicit package name at test16.pl lin +e 12. Global symbol "$score" requires explicit package name at test16.pl lin +e 12. Execution of test16.pl aborted due to compilation errors.


Any constructive advice would be most appreciated.

Thanks,
~Katie

Update: Solved the 'explicit package name issues' by declaring the lexical variables outside of the while loop.