#!/usr/bin/perl -w use Data::Dumper; use strict; my @data = ( { 'ip' => '10.0.0.10', 'host' => 'laptop' }, { 'ip' => '10.0.0.1', 'host' => 'router' }, { 'ip' => '10.0.0.3', 'host' => 'desktop' } ); my %refs; @refs{map { pack('N',$_) } @data} = @data; # cache references my @sorted = map { $refs{substr($_,4)} } sort map { pack('C4N',split('\.',$_->{'ip'}), $_) } @data; print Dumper(\@sorted); #### $VAR1 = [ { 'ip' => '10.0.0.1', 'host' => 'router' }, { 'ip' => '10.0.0.3', 'host' => 'desktop' }, { 'ip' => '10.0.0.10', 'host' => 'laptop' } ];