Эта строка не делает то, о чем вы думаете:
push @{$hCompilations{$album}} , %track;
Это развернет ваш ха sh в список пар ключ / значение и приведет к sh каждой из них в отдельности. на ваш массив. То, что вы хотите, это поместить в массив массив sh ссылки на ваш ha sh.
Вы можете сделать это, создав новую копию ha sh:
push @{$hCompilations{$album}} , { %track };
Но для этого требуется лишняя копия ha sh, что повлияет на производительность вашей программы. Лучше было бы переместить объявление этой переменной (my %track
) в l oop (чтобы вы каждый раз получали новую переменную вокруг l oop), а затем просто pu sh - ссылку на га sh на ваш массив.
push @{$hCompilations{$album}} , \%track;
У вас уже есть код для получения массива дорожек, поэтому итерация по этому массиву проста.
my @trackRecs = @{$hCompilations{$albumName}};
foreach my $track (@trackRecs) {
print "$track->{trackName}/$track->{trackArtist}\n";
}
Обратите внимание, что вы не нужен промежуточный массив:
foreach my $track (@{$hCompilations{$albumName}}) {
print "$track->{trackName}/$track->{trackArtist}\n";
}