From your code, it looks like you are only getting the last entry in your file:
foreach (@lines) {
my ($name,$score) = split /:/, $_;
$hash_ref->{ 'name' } = $name; # replaces the old 'name' entry
$hash_ref->{ 'score' } = $score; # replaces the previous 'score'
+ entry
}
I might suggest using an array ref for each entry, or maybe an array of hashrefs or a hash of hashrefs. Examples:
##Array of Hashrefs:
my @entries;
for (@lines) {
# as someone once said ~if you plan to explicitly use $_ everywhere,
+ you might as well give it a more meaningful name or not use it at al
+l.~
my ($name,$score) = split /:/;
$hash_ref->{ 'name' } = $name;
$hash_ref->{ 'score' } = $score;
push (@entries, $hash_ref);
}
return( @entries);
}
##Hash of Hashrefs:
for (@lines) {
my ($name,$score) = split /:/;
$hash_ref->{ $name }{'name'} = $name;
$hash_ref->{ $name }{'score'} = $score;
}
return($hash_ref);
}
##Hash of Arrayrefs:
for (@lines) {
my ($name,$score) = split /:/;
$hash_ref->{ $name } = [$name,$score];
}
return($hash_ref);
}
I could come up with several more data structures to store the same data but you get the idea. TMTOWTDI and as I like to always say, see whatever works best with your program and go with that. |