use strict; my @old = (237,153,258,231,154,159,141); my %unique = map {$_ =>1} @old; #just in case the old rankins are not unique my @ordered = sort keys %unique; my %map = (); for my $i (0..$#ordered){ $map{$ordered[$i]} = $i+1; } foreach my $i (@old){ print $i, "=>",$map{$i}/scalar(@ordered),"\n"; } __END__ 237=>0.857142857142857 153=>0.285714285714286 258=>1 231=>0.714285714285714 154=>0.428571428571429 159=>0.571428571428571 141=>0.142857142857143