use strict; use warnings; my @array = qw(Patch_1.0 Patch_2.0 Patch_3.1 Patch_5.0 Patch_4.2 Patch_6.0 Patch_7.0 Patch_8.0 Patch_9.3 Patch_10.2 Apatch_11.0); @array = sort patch_sort @array; print "$_\n" for @array; sub patch_sort { my ($a_name, $a_version) = $a =~ / (\w+) _ ([\d.]+) $ /x or die 'Invalid lhs, stopped'; my ($b_name, $b_version) = $b =~ / (\w+) _ ([\d.]+) $ /x or die 'Invalid rhs, stopped'; return $a_name cmp $b_name || $a_version <=> $b_version; } #### 18:22 >perl 1860_SoPW.pl Apatch_11.0 Patch_1.0 Patch_2.0 Patch_3.1 Patch_4.2 Patch_5.0 Patch_6.0 Patch_7.0 Patch_8.0 Patch_9.3 Patch_10.2 18:22 > #### use strict; use warnings; use Sort::Naturally; my @array = qw(Patch_1.0 Patch_2.0 Patch_3.1 Patch_5.0 Patch_4.2 Patch_6.0 Patch_7.0 Patch_8.0 Patch_9.3 Patch_10.2 Apatch_11.0); @array = nsort @array; print "$_\n" for @array;