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);