Your skill will accomplishwhat the force of many cannot PerlMonks

### Re: Sorting Hash / Array

by kcott (Chancellor)
 on May 16, 2012 at 18:00 UTC ( #970882=note: print w/replies, xml ) Need Help??

in reply to Sorting Hash / Array

Here's one way of doing it.

```#!/usr/bin/env perl

use strict;
use warnings;

my \$VAR1 = {
'127' => {
'network' => '10.182.48.0/24',
'VLAN' => '3509'
},
'32' => {
'network' => '10.182.12.0/25',
'VLAN' => '2121'
},
'90' => {
'network' => '10.183.243.128/25',
'VLAN' => '3494'
}
};

my @sorted_keys
= sort { \$VAR1->{\$a}{network} cmp \$VAR1->{\$b}{network} } keys %\$VA
+R1;

print qq{Key\tNetwork\t\t\tVLAN\n};
for my \$key (@sorted_keys) {
print qq{\$key\t}, \$VAR1->{\$key}{network}, qq{\t\t},
\$VAR1->{\$key}{VLAN}, qq{\n};
}

Here's the output:

```\$ pm_sort_hash_array.pl
Key    Network                VLAN
32     10.182.12.0/25        2121
127    10.182.48.0/24        3509
90     10.183.243.128/25     3494

-- Ken

Replies are listed 'Best First'.
Re^2: Sorting Hash / Array
by johngg (Abbot) on May 16, 2012 at 20:05 UTC

What happens if you add another network to the hashref with the address 10.19,72.0/25? That will sort lexically after the others even though in numerical network order it should come first!

You need to convert the address (excluding the netmask) into something that will produce the right result when sorting lexically. The Socket module provides inet_aton() to achieve this.

Cheers,

JohnGG

Create A New User
Node Status?
node history
Node Type: note [id://970882]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2017-12-16 09:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
What programming language do you hate the most?

Results (449 votes). Check out past polls.

Notices?