Si vous voulez un numéro Perl, il suffit d'aller directement au numéro sans eval. Conserver les parties du numéro que vous extraire et de les utiliser dans une sorte de clé mises en cache:
use 5.010;
while(<DATA>)
{
chomp;
m/
(?:
(?<coefficient> \d+ (?:\.\d+)?)
\s+
)?
(?<base> (\d+))
\^
(?<exponent> -?\d+)
/x;
push @numbers,
[ ($+{coefficient} // 1), $+{exponent}, $_ ];
}
my @sorted = sort {
$a->[1] <=> $b->[1]
||
$a->[0] <=> $b->[0]
} @numbers;
foreach my $number (@sorted)
{
print "$number->[-1]\n";
}
__DATA__
10^-92
2 10^-14
10^-105
3 10^-20
Vous pouvez faire bouillir que jusqu'à une Schwartzienne Transformer:
use 5.010;
print
map {
$_->[-1]
}
sort {
$a->[1] <=> $b->[1]
||
$a->[0] <=> $b->[0]
}
map {
m/
(?:(?<c> \d+ (?:\.\d+)?) \s+)? # coefficient
(?<b> (\d+)) # base
\^
(?<e> -?\d+) # exponent
/x;
[ ($+{c} // 1), $+{e}, $_ ];
} <DATA>;
__DATA__
10^-92
2 10^-14
10^-105
3 10^-20
ce sont tous hors d'un dans la exposant –