$val=$val+0; # Sum $val=eval "$val"; # Eval $val=sprintf("%f", $val); # Sprintf # Call your original technique "Regex" #### Sum("1.25e-5") gives '1.25e-05' Regex("1.25e-5") '1.25e-05' Eval("1.25e-5") '1.25e-05' Sum("1.25e-3") 0.00125 Regex("1.25e-3") 0.00125 Eval("1.25e-3") 0.00125 #### Sprintf("1.25e-5") 0.000013 Sprintf("1.25e-3") 0.001250 Sprintf("1.25e-7") 0.000000 #### sprintf("%.10f", $val) 0.0012500000 #### Benchmark: timing 100000 iterations of Eval, Regex, Sprintf, SprintfSubst, Sum... Eval: 20 wallclock secs (19.58 usr + 0.00 sys = 19.58 CPU) Regex: 9 wallclock secs ( 9.97 usr + 0.00 sys = 9.97 CPU) Sprintf: 7 wallclock secs ( 6.22 usr + 0.00 sys = 6.22 CPU) SprintfSubst: 8 wallclock secs ( 8.74 usr + 0.00 sys = 8.74 CPU) Sum: 4 wallclock secs ( 3.52 usr + 0.00 sys = 3.52 CPU) #### #!/usr/bin/perl use Benchmark; sub Regex { my $val=shift; $val =~ s/([\.\d]+)e([-+]?\d+)/$1*10**$2/egi; return $val; } sub Eval { my $val=shift; $val=eval " $val "; return $val; } sub Sum { my $val=shift; $val=$val+0; return $val; } sub Sprintf { my $val=shift; $val=sprintf("%f",$val); return $val; } sub SprintfSubst { my $val=shift; $val=sprintf("%.10f", $val); $val=~s/0*$//; return $val; } timethese(100000, { Regex => sub { Regex("1.25e-3") }, Eval => sub { Eval("1.25e-3") }, Sum => sub { Sum("1.25e-3") }, Sprintf => sub { Sprintf("1.25e-3") }, SprintfSubst => sub { SprintfSubst("1.25e-3") }, });