$resultstatuscodes[1]="registered"; $resultstatuscodes[2]="unregistered"; $resultstatuscodes[3]= "waiting"; my @resultstatus=(); for (my $i=0;$i<300;$i++) { $resultstatus[$i]= 1+ int(3*rand); }; my %results=(); $count=map {$results{$resultstatuscodes[$_]}++} @resultstatus; foreach my $resulttype(keys %results) { printf "%s => %5d (%4.2f%%)\n" ,$resulttype , $results{$resulttype}, 100 * $results{$resulttype} / $count;}