if($sort_field eq 'createtime') { for $node (sort { ($date, $time) = split / /, $nodes{$a}{createtime}; ($year, $month, $day) = split /-/, $date; ($hour, $min, $sec) = split /:/, $time; $create_timeA = timelocal($sec,$min,$hour,$day,$month,$year); ($date, $time) = split / /, $nodes{$b}{createtime}; ($year, $month, $day) = split /-/, $date; ($hour, $min, $sec) = split /:/, $time; $create_timeB = timelocal($sec,$min,$hour,$day,$month,$year); if($sort_order eq 'ASC') { return $create_timeA <=> $create_timeB; } else { return $create_timeB <=> $create_timeA; } } keys %nodes) { print "$node: $nodes{$node}{$sort_field}\n"; } } else { whatever; }