in reply to Re: Sorting Hash / Array
in thread Sorting Hash / Array

Hi Chris

I Have a bit of an issue in that it doesn't seem to sort subnets correctly.

10.182.8.0/26 10.182.8.0/21 10.182.8.64/26 10.182.8.128/26 10.182.8.192/26
10.182.32.0/24 10.182.32.0/19 10.182.33.0/24

I would expect 10.182.8.0/21 to be before 10.182.8.0/26

Could you help?

Thanks

Nick

Replies are listed 'Best First'.
Re^3: Sorting Hash / Array
by johngg (Canon) on May 21, 2012 at 09:45 UTC

    Split the network and netmask into separate terms and sort on netmask within network.

    knoppix@Microknoppix:~$ perl -MSocket -Mstrict -wE ' my @networks = qw{ 10.182.8.0/26 10.182.8.0/21 10.182.8.64/26 10.182.8.128/26 10.182.8.192/26 }; say for map { $_->[ 0 ] } sort { $a->[ 1 ] cmp $b->[ 1 ] || $a->[ 2 ] <=> $b->[ 2 ] } map { my( $network, $netmask ) = split m{/}; [ $_, inet_aton( $network ), $netmask ]; } @networks;' 10.182.8.0/21 10.182.8.0/26 10.182.8.64/26 10.182.8.128/26 10.182.8.192/26 knoppix@Microknoppix:~$

    I hope this is helpful.

    Cheers,

    JohnGG