I formatted $hour to have a leading '0', if necessary, using the sprintf function.
There are 2 hashes: one for accumulating the daily totals and one for accumulating the hourly stats.
Chrismy %daily_total; my %hourly_stats; while (<DATA>) { # looking for: 06/05/2008 8:31a if (m{\d\d/(\d\d)/\d{4}\s{1,2}(\d+):(\d\d)(a|p)}) { my $day = $1; # get day my $hour = sprintf "%02d", $2; # get hour my $minute = $3; # get minutes my $ampm = $4; # get am or pm if ($ampm eq "p" && $hour != 12) {$hour += 12; } $hour = '00' if $ampm eq "a" && $hour == 12; $daily_total{$day}++; $hourly_stats{$day}{$hour}{total}++; if ($minute <= 29) { $hourly_stats{$day}{$hour}{HalfHour00}++; } else { $hourly_stats{$day}{$hour}{HalfHour30}++; } } } for my $day (sort keys %daily_total) { print "day: $day, total: $daily_total{$day}\n"; for my $hour (sort keys %{ $hourly_stats{$day} }) { print "hour: $hour\n"; print " first 1/2 hr: ", $hourly_stats{$day}{$hour}{HalfHour +00}|| 0,"\n"; print " second 1/2 hr: ",$hourly_stats{$day}{$hour}{HalfHour +30}|| 0,"\n"; print " total/hour: $hourly_stats{$day}{$hour}{total}\n"; } print "\n"; }
Update: A change to output routine to correct error found using dataset provided by johngg.
In reply to Re: Brain muchly befuddled by nested hashes
by Cristoforo
in thread Brain muchly befuddled by nested hashes
by WartHog369
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |