#!/usr/bin/perl -w use strict; use Data::Dumper; my %years =( 2007 => { '01' => 07, '02' => 34, '10' => 24, '09' => 14, }, 2008 => { '01' => 11, '02' => 64, '03' => 20, '09' => 13, }, ); my @year_data; foreach my $year (keys (%years)) { foreach my $month (keys %{$years{$year}}) { push (@year_data, [$year, $month, $years{$year}{$month}]); } } @year_data = sort { my ($yearA, $monthA, $dataA) = @$a; my ($yearB, $monthB, $dataB) = @$b; $dataA <=> $dataB or $monthA <=> $monthB or $yearA <=> $yearB }@year_data; print "minimum is: @{$year_data[0]}\n"; print "maximum is: @{$year_data[-1]}\n"; #minimum is: 2007 01 7 #maximum is: 2008 02 64