# zunächst erzeugen wir ein sortierbares Array # Achtung es werden Schlüssel hinzugefügt # guck hier daß es keine Konflikte gibt!!! my @slice = (); foreach my $time(keys %$data){ foreach my $anr( keys %{$data->{$time}} ){ my $hunt = $data->{$time}{$anr}; foreach my $cnr(keys %{$hunt}){ my $charge = $data->{$time}{$anr}{$cnr}; $charge->{TIME} = $time; $charge->{ANR} = $anr; $charge->{CNR} = $cnr; push @slice, $charge; } } } # und nun das Array sortieren # nach den gewünschten Kriterien @slice = map{$_->[0]} sort{$a->[2] <=> $b->[2]} # nach Artikel aufsteigend sort{$a->[3] <=> $b->[3]} # nach Charge aufsteigend sort{$b->[4] <=> $a->[4]} # nach Bestand absteigend map{[$_, $_->{TIME}, $_->{ANR}, $_->{CNR}, $_->{bestand}]} @slice; # 0 1 2 3 4 print Dumper \@slice;