use Statistics::Descriptive; my @ranges = (19, 29, 39); # 1..19, 20..29, 30..39 my $stat = Statistics::Descriptive::Full->new; $stat->add_data( 12, 14, 15, 20, 21 ); my %dist = $stat->frequency_distribution(\@ranges); printf " %5d: %4d\n", $_, $dist{$_} for @ranges;