use List::Util qw< min max >; my @array = ( -150, -5, 50, 0, 7, 0, 2 ,4, 3, 8, -1 ); my $min = min(@array); my $max = max(@array); my @final_array = map 100*($_-$min)/($max-$min), @array; for( 0..$#array ) { printf "%5.1f%% %5d\n", $final_array[$_], $array[$_]; } __END__ 0.0% -150 72.5% -5 100.0% 50 75.0% 0 78.5% 7 75.0% 0 76.0% 2 77.0% 4 76.5% 3 79.0% 8 74.5% -1