A hash isn't a spreadsheet, so you can't get "access" to a column. But you can add up the arrays for each key and the values for each position in the array. However, I don't really think the data structure you have is a great one.
There are two issues:
- You have the labels as just another value in the hash. This won't work because you need to be sure to print them first, and because you don't want to do any calculations on them. So I'm going to just not make them part of the data structure at all.
- For each key in the hash, you are actually not assigning an array, but a hash with a single key called "data." This doesn't help much, so I won't use it and use an array instead.
Here's some code:
use strict;
use warnings;
my @columntotals;
my %sheet = (Terry => [5, 2],
Doug => [4, 3],
Fred => [1, 5]);
print "Employee Buffalo Cleveland Total\n";
foreach my $key (keys %sheet) {
my @data = @{$sheet{$key}};
my $sum = 0;
$sum += $_ for @data;
push @data, $sum;
print "$key @data\n";
$columntotals[$_] += $data[$_] for 0 .. $#data;
}
print "Total @columntotals\n";