my @multi_array; push @multi_array, [split] for ; my @by_second = reverse sort {unity} @multi_array; for (@by_second) { print "@{$_}\n"; } sub unity { $b->[1] *= 1.1E3; #sprintf("%E", 0+$b->[1]); return 1;} __DATA__ 1.10000E0 1.00000E0 1.00000E0 2.20000E0 2.00000E0 2.00000E0 3.30000E0 3.00000E0 3.00000E0