#!/usr/bin/perl -w
use strict;
my @h = ( qw(
psapp1
psapp
psapp2
psepapp1
psepapp
psepapp2
psimgprod
pspappuat
pswebapp2
pswebapp
) );
my @h_sorted = @h[
map { unpack "N", substr($_,-4) }
sort
map {
my $key = $h[$_];
$key =~ s[(\d+)][ pack "N", $1 ]ge;
$key . pack "CNN", 0, 0, $_
} 0..$#h
];
foreach (@h_sorted) { print "$_\n"; };
This inserts 5 nul bytes which prevents the problem. 1 nul byte is enough to fix this specific case. 4 fixes all cases except for the possibility of "x0" sorting before "x". 5 fixes all cases (provided you don't have nul bytes in your strings).
|