foreach my $hash (@hash) { no warnings 'uninitialized'; print "$_ => $hash->{$_}\n" for map { $_->[0] } sort { $a->[1] cmp $b->[1] || $a->[2] <=> $b->[2] || $a->[3] <=> $b->[3] || $a->[4] <=> $b->[4] } map { [ $_, $hash->{$_}=~m!^(?:([a-z]+)(\d+)/)?(?:(\d+)/)?(\d+)$!i ] } keys %$hash; print "-","\n"; } __END__ 2 => Gi1/0/0 1 => Gi1/0/1 3 => Gi1/1/1 4 => Gi2/0/0 5 => Gi2/0/1 - 1 => 1 2 => 2 3 => 3 4 => 4 5 => 5 - 4 => 1/1 5 => 1/2 1 => 2/1 2 => 4/5 3 => 15/1 - 1 => Fa0/1 2 => Fa0/2 3 => Fa3/1 5 => Gi0/0 4 => Gi0/1 -