sub get_latest { my ($year, $mon, $day, $num) = @_; my @arr; if ($year && $mon && $day) { my $h = $d_dbd->{$year}->{$mon}->{$day}; @arr = keys(%$h); } elsif ($year && $mon) { my $h = $d_dbd->{$year}->{$mon}; FOO: for my $day (sort {$b <=> $a} (keys %$h)) { my $h = $d_dbd->{$year}->{$mon}->{$day}; push(@arr, keys(%$h)); last FOO if (scalar(@arr) > $num); } } elsif ($year) { my $h = $d_dbd->{$year}; FOO: for my $mon (sort {$b <=> $a} (keys %$h)) { my $h = $d_dbd->{$year}->{$mon}; for my $day (sort {$b <=> $a} (keys %$h)) { my $h = $d_dbd->{$year}->{$mon}->{$day}; push(@arr, keys(%$h)); last FOO if (scalar(@arr) > $num); } } } else { FOO: for my $year (sort {$b <=> $a} (keys %$d_dbd)) { my $h = $d_dbd->{$year}; for my $mon (sort {$b <=> $a} (keys %$h)) { my $h = $d_dbd->{$year}->{$mon}; for my $day (sort {$b <=> $a} (keys %$h)) { my $h = $d_dbd->{$year}->{$mon}->{$day}; push(@arr, keys(%$h)); last FOO if (scalar(@arr) > $num); } } } } return extract(\@arr, $num); }