in reply to best practices for a complex sort + splitting an alphanumeric string
Sometimes its worth it to just turn off uninitialized warnings:
use strict; use warnings; my @hash=( { 1 => "Gi1/0/1", 2 => "Gi1/0/0", 3 => "Gi1/1/1", 4 => "Gi2/0/0", 5 => "Gi2/0/1", }, { 1 => "1", 2 => "2", 3 => "3", 4 => "4", 5 => "5", }, { 1 => "2/1", 2 => "4/5", 3 => "15/1", 4 => "1/1", 5 => "1/2", }, { 1 => "Fa0/1", 2 => "Fa0/2", 3 => "Fa3/1", 4 => "Gi0/1", 5 => "Gi0/0", });
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 -
|
|---|