... if ( not defined $most_recent{$col1}{$col2} or $most_recent{$col1}{$col2}->{dtime} lt $dtime ) { $most_recent{$col1}{$col2}->{dtime} = $dtime; $most_recent{$col1}{$col2}->{col3} = $col3; $most_recent{$col1}{$col2}->{col4} = $col4; } } print "Most recent:\n"; foreach my $col1 ( keys %most_recent ) { foreach my $col2 ( keys %{$most_recent{$col1}} ) { print "$col1, $col2, $most_recent{$col1}{$col2}->{dtime}, $most_recent{$col1}{$col2}->{col3}, $most_recent{$col1}{$col2}->{col4}\n"; } }