use warnings;
use strict;
my $column=2;
my @sort_col;
my @lines;
while(<DATA>) {
my @F=split(/\|/,$_);
push @sort_col, $F[$column];
push @lines, "$_";
}
@sort_col = map {[$_ => /^\d+$/ ? 0 : /^\D+$/ ? 1 : 2]} @sort_col;
my @sortedOrder =
sort {$sort_col[$a][1] cmp $sort_col[$b][1] or $sort_col[$a][0] cm
+p $sort_col[$b][0]}
0 .. $#sort_col;
print @lines[@sortedOrder];
__DATA__
D|0|95465tan|2|4|4|14028.77|0.00|BF2-002|22/09/2009|07/01/2009|06/09/2
+009|45544564|
D|0|954564545|1|4|abar_BF4|4|3913.17|0.00|accabar_BF4-003|22/09/2009|0
+7/02/2009|06/09/2009|10254754|
D|0|a454654|1|4|ar_BF4|4|3913.17|0.00|acctrabar_BF4-003|22/09/2009|07/
+02/2009|06/09/2009|11122323|
D|0|Chking|1|4|arabar_BF4|4|3913.17|0.00|acarabar_BF4-003|22/09/2009|0
+7/02/2009|06/09/2009|11122323|
Prints:
D|0|954564545|1|4|abar_BF4|4|3913.17|0.00|accabar_BF4-003|22/09/2009|0
+7/02/2009|06/09/2009|10254754|
D|0|Chking|1|4|arabar_BF4|4|3913.17|0.00|acarabar_BF4-003|22/09/2009|0
+7/02/2009|06/09/2009|11122323|
D|0|95465tan|2|4|4|14028.77|0.00|BF2-002|22/09/2009|07/01/2009|06/09/2
+009|45544564|
D|0|a454654|1|4|ar_BF4|4|3913.17|0.00|acctrabar_BF4-003|22/09/2009|07/
+02/2009|06/09/2009|11122323|
True laziness is hard work
|