my %oids = ( "ifName" => { 1 => "Gi1/0/1", 2 => "Gi1/0/0", 3 => "Gi1/1/1", 4 => "Gi2/0/0", 5 => "Gi2/0/1", }, ); #### - or: my %oids = ( "ifName" => { 1 => "1", 2 => "2", 3 => "3", 4 => "4", 5 => "5", }, ); - or: my %oids = ( "ifName" => { 1 => "2/1", 2 => "4/5", 3 => "15/1", 4 => "1/1", 5 => "1/2", }, ); - or: my %oids = ( "ifName" => { 1 => "Fa0/1", 2 => "Fa0/2", 3 => "Fa3/1", 4 => "Gi0/1", 5 => "Gi0/0", }, ); #### my (@a, @b); my @port_ifIndices = sort { if ($oids{ifName}{$a} =~ /\//) { @a = split(/\//, $oids{ifName}{$a}); @b = split(/\//, $oids{ifName}{$b}); } else { @a = $oids{ifName}{$a}; @b = $oids{ifName}{$b}; } if ($a[0] =~ /[A-Za-z]/) { $a[0] ne $b[0] ? $a[0] cmp $b[0] : ($a[1] <=> $b[1] ? $a[1] <=> $b[1] : $a[2] <=> $b[2]); } else { $a[0] != $b[0] ? $a[0] <=> $b[0] : ($a[1] <=> $b[1] ? $a[1] <=> $b[1] : $a[2] <=> $b[2]); } } keys(%{ $oids{ifName} }); foreach my $ifIndex (@port_ifIndices) { print ("$ifIndex: $oids{ifName}{$ifIndex}\n"); } #### 2: Gi1/0/0 1: Gi1/0/1 3: Gi1/1/1 4: Gi2/0/0 5: Gi2/0/1