Первый шаг:
use strict;
говорит:
Bareword "Honda" not allowed while "strict subs" in use at xx.pl line 4.
Это не одобренный способ создания хэша. Я предлагаю:
use strict;
use warnings;
my %hash = (
Honda => { Blue => '10', Red => '10', Yellow => '60' },
Ford => { Blue => '20', Red => '25', Yellow => '26' },
Toyota => { Blue => '17', Red => '16', Yellow => '18' },
);
Тогда вам, вероятно, следует использовать Text :: CSV . Тем не менее, это не так сложно сделать вывод с помощью простых манипуляций. Мы можем использовать тот факт, что вы запросили синий, красный, желтый, которые расположены в алфавитном порядке:
print "make,blue_volume, red_volume,yellow_volume\n";
foreach my $make (sort keys %hash)
{
print "$make";
foreach my $colour (sort keys %{$hash{$make}})
{
print ",$hash{$make}{$colour}";
}
print "\n";
}
Для примера хэша, результат будет:
make,blue_volume, red_volume,yellow_volume
Ford,20,25,26
Honda,10,10,60
Toyota,17,16,18
Если бы был риск использования кавычек или чего-то еще, я бы использовал Text :: CSV.