#! /usr/bin/perl use warnings; use strict; use List::UtilsBy qw{ min_by max_by }; my %counts = ( Adam => { "201708" => 1, "201703" => 1, "201804" => 1, "201603" => 1, "201705" => 1, "201702" => 1, "201608" => 1, "201704" => 1, }, Sam => { "201803" => 1, "201801" => 1 }, ); for my $name ( keys %counts ) { my $subhash = $counts{$name}; my $maximal = max_by { $_ } keys %$subhash; print "$name, $maximal\n"; } for my $name ( keys %counts ) { my $subhash = $counts{$name}; my $minimal = min_by { $_ } keys %$subhash; print "$name, $minimal\n"; } #### use List::UtilsBy qw{ minmax_by }; for my $name ( keys %counts ) { my $subhash = $counts{$name}; my ($minimal, $maximal) = minmax_by { $_ } keys %$subhash; print "$name, $minimal - $maximal\n"; }