A hash is inappropriate here. Your key is not a key at all. A key is a *unique* way of *identifying* something. A score is neither unique, nor an identity.
my @data = (
[ 12, 'First line of text' ],
[ 25, 'Second line of text' ],
[ 34, 'Third line of text' ],
);
foreach (@scoreWords) {
my $re = qr/\b\Q$_\E\b/i;
foreach (@data) {
$_[0] += $y while $_[1] =~ /$re/g;
}
}
Update: I either missed the second part of the question, or the OP has been updated. Here's my updated answer:
my @data = (
[ 1, 12, 'First line of text' ],
[ 2, 25, 'Second line of text' ],
[ 3, 34, 'Third line of text' ],
);
foreach (@scoreWords) {
my $re = qr/\b\Q$_\E\b/i;
foreach (@data) {
$_[1] += $y while $_[2] =~ /$re/g;
}
}
print("Line ${$_}[0] has a score of ${$_}[1]\n")
foreach sort { $b->[1] <=> $a->[1] } @data;
or if you don't actually care about the line numbers:
my @data = (
[ 12, 'First line of text' ],
[ 25, 'Second line of text' ],
[ 34, 'Third line of text' ],
);
foreach (@scoreWords) {
my $re = qr/\b\Q$_\E\b/i;
foreach (@data) {
$_[0] += $y while $_[1] =~ /$re/g;
}
}
print("${$_}[0]: ${$_}[1]\n")
foreach sort { $b->[0] <=> $a->[0] } @data;
Update: Changed if // to while //g.