#!/usr/bin/perl -w use strict; use warnings; my %uebergabe = ( data => { 1 => { 1 => 'aaron', 2 => 'suppe', 3 => 10, }, 2 => { 1 => 'aaron', 2 => 'zander', 3 => 20, }, 3 => { 1 => 'hannes', 2 => 'zander', 3 => 20, }, }, art => ['a','a','n'], # Art der Spalte a=Alpha oder n=Nummer sortierprio => [1,2,3], # Erst nach Spalte 1, dann nach 2, dann nach 3 sortierricht => [1,0,1], # Sortierrichtung 0=abwärts/rückwärts oder 1=aufwärts/vorwärts ); tabellenhandler(\%uebergabe); ############################################################################### sub tabellenhandler { my ($input) = @_; foreach my $zeile ( sort { for (my $sp_sort = 0; $sp_sort < scalar @{$input->{sortierprio}}; $sp_sort ++) { if ($input->{sortierricht}[$sp_sort]) { if ($input->{art}[$sp_sort] eq 'n') { $input->{data}{$a}{$input->{sortierprio{$sp_sort}}} <=> $input->{data}{$b}{$input->{sortierprio{$sp_sort}}} } else { $input->{data}{$a}{$input->{sortierprio{$sp_sort}}} cmp $input->{data}{$b}{$input->{sortierprio{$sp_sort}}} } } else { if ($input->{art}[$sp_sort] eq 'n') { $input->{data}{$b}{$input->{sortierprio{$sp_sort}}} <=> $input->{data}{$a}{$input->{sortierprio{$sp_sort}}} } else { $input->{data}{$b}{$input->{sortierprio{$sp_sort}}} cmp $input->{data}{$a}{$input->{sortierprio{$sp_sort}}} } } } } keys %{$input->{data}} ) { print "Zeile:"; foreach my $spalte ( keys %{$input->{data}{$zeile}} ) { print " - ".$input->{data}{$zeile}{$spalte}; } print "\n"; } }