#!/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 => [3,2,1], # Nummer der Spalte in der Reihenfolge der Sortierung sortierricht => [1,1,1], # Sortierrichtung 0=abwärts/rückwärts oder 1=aufwärts/vorwärts ); tabellenhandler(\%uebergabe); ############################################################################### sub tabellenhandler { my ($input) = @_; foreach my $zeile ( sort { my $return = 0; my $spalte = -1; while (!$return && $spalte < scalar @{$input->{sortierprio}}) { $spalte ++; my $vergleich_spalte = $input->{sortierprio}[$spalte]; if ($input->{sortierricht}[$vergleich_spalte - 1]) { if ($input->{art}[$vergleich_spalte - 1] eq 'n') { $return = $input->{data}{$a}{$vergleich_spalte} <=> $input->{data}{$b}{$vergleich_spalte}; } else { $return = $input->{data}{$a}{$vergleich_spalte} cmp $input->{data}{$b}{$vergleich_spalte}; } } else { if ($input->{art}[$vergleich_spalte - 1] eq 'n') { $return = $input->{data}{$b}{$vergleich_spalte} <=> $input->{data}{$a}{$vergleich_spalte}; } else { $return = $input->{data}{$b}{$vergleich_spalte} cmp $input->{data}{$a}{$vergleich_spalte}; } } } $return; } keys %{$input->{data}} ) { print "Zeile:"; foreach my $spalte ( sort {$a <=> $b} keys %{$input->{data}{$zeile}} ) { print " - ".$input->{data}{$zeile}{$spalte}; } print "\n"; } }