В Perl, у меня есть многомерная ха sh месячная продажа в этой форме:
monthlysale{$year}{$qtr}{itemcode}
Пример этого:
monthlysale{2013}{3}{MNB}= is 5
monthlysale{2013}{3}{ABC}= is 24
monthlysale{2013}{3}{CL}= is 336
monthlysale{2013}{3}{XNX}= is 18
monthlysale{2013}{3}{CVG}= is 15
monthlysale{2013}{3}{CTP}= is 11
monthlysale{2013}{3}{CPE}= is 86
monthlysale{2013}{4}{MNB}= is 47
monthlysale{2013}{4}{ABC}= is 60
monthlysale{2013}{4}{CL}= is 39
monthlysale{2013}{4}{XNX}= is 16
monthlysale{2013}{4}{CVG}= is 26
monthlysale{2013}{4}{CTP}= is 19
и аналогичный для другие годы и месяцы, для списка элементов.
Однако вышеупомянутое НЕ в указанном порядке, вместо этого оно случайным образом размещается для года и квартала.
Мое требование - распечатать Выход SORTED, который должен быть отсортирован от высокой стоимости продаж к низкой стоимости продаж, но должен быть сгруппирован по году и кварталу.
Например, желаемый результат должен быть:
monthlysale{2013}{3}{CL}= is 336
monthlysale{2013}{3}{CPE}= is 86
monthlysale{2013}{3}{ABC}= is 24
monthlysale{2013}{3}{XNX}= is 18
monthlysale{2013}{3}{CVG}= is 15
monthlysale{2013}{3}{CTP}= is 11
monthlysale{2013}{3}{MNB}= is 5
monthlysale{2013}{4}{ABC}= is 60
monthlysale{2013}{4}{MNB}= is 47
monthlysale{2013}{4}{CL}= is 39
monthlysale{2013}{4}{CVG}= is 26
monthlysale{2013}{4}{CTP}= is 19
monthlysale{2013}{4}{XNX}= is 16
и и т. д.
То есть ... выходные данные должны начинаться с самого первого доступного года (первое измерение), проходить через квартальные значения 1, 2,3,4 (второе измерение) и перечислять код элемента (CL, CPE, AB C, et c. - третье измерение) и значения массива (336,86, 24 ...) в порядке убывания значений массива.
Я попробовал следующий код, но
foreach $yr (@yeararray) #This array is sorted (2001,2002,2003....)
{
foreach $qt (@qtrarray) #This array is sorted (1,2,3,4)
{
foreach my $name (sort { $monthlysale{$yr}{$qt}{$a} <=> $monthlysale{$yr}{$qt}{$b} or $a cmp $b } keys %monthlysale{$yr}{$qt})
{
printf "%-8s %s\n", $name, $monthlysale{$yr}{$qt}{$name};
}
}
}
Но он возвращает ошибку: "Experimental keys on scalar is now forbidden at script.pl line 111, <DATA> line 1.
"
Что такое Я делаю неправильно здесь. и что можно сделать, чтобы получить желаемый результат, пожалуйста?
PS: данные в формате CSV, как это требуется в комментарии:
2013,3,MNB,5
2013,3,ABC,24
2013,3,CL,336
2013,3,XNX,18
2013,3,CVG,15
2013,3,CTP,11
2013,3,CPE,86
2013,4,MNB,47
2013,4,ABC,60
2013,4,CL,39
2013,4,XNX,16
2013,4,CVG,26
2013,4,CTP,19