my @sorted = map { $_->[4] } sort { $a->[0] <=> $b->[0] or $a->[1] <=> $b->[1] or $a->[2] <=> $b->[2] or $a->[3] <=> $b->[3] } map { if( my (@ipParts) = $_ =~ m/dst outside:(\d+)\.(\d+)\.(\d+)\.(\d+)/ ) { [ @ipParts, $_ ] } else { # what shell I do if pattern not found? use 0.0.0.0? [ 0, 0, 0, 0, $_ ]; } # else } @input;