Quickest way I can think of is to just compare the values in the array to check for dupes. A hash of hashes would most likely take less processor time, but require recoding quite a bit of the things you have already finished.
my $Flag = 0;
(/^$ranks$/)?$Flag++:"" foreach @{$HoL{$name}};
if ($Flag == 0) {
push @{$HoL{$name}}, $ranks;
}