use strict; sub my_sort { my $max_index = $#{@{$a->{Path}}} > $#{@{$b->{Path}}} ? $#{@{$a->{Path}}} : $#{@{$b->{Path}}}; for (0..$max_index) { my $r = $a->{Path}->[$_] <=> $b->{Path}->[$_]; return $r if $r; } return 0; } sub print_tree { my $tree = shift; for my $member (@$tree) { print join (' ', @{$member->{Path}})."\n"; } } my $input = <\@a}; } print "ORIGINAL:\n"; print_tree(\@Tree); my @Tree_sorted = sort my_sort @Tree; print "SORTED:\n"; print_tree(\@Tree_sorted);