foreach my $key ( keys %hash ) { my @tmp = split /\s+/, $hash{$key}; my $type = $tmp[0]; my $dt = $tmp[1]; my ($year, $month, $day) = ('','',''); if($dt =~ m|(\d{4})(\d{2})(\d+{2})T.*$|){ ($year, $month, $day)=($1,$2,$3); } ...... ...... printf("bucket: %s\ttype: %s\t%s-%s-%s\t%s\n",$bucket +,$type,$year,$month,$day,$dt); ......