我想要达到的目的是将Evalue 1e-2转换为0.01。
my $cutoff = "1e-12";
if ($cutoff =~ m/^\de-{1}\d+?$/){
$cutoff = s/e-/*10^(-/;
$cutoff .= ")";
}
print "$cutoff\n";
这是一个更大的脚本的一部分,在use warnings;
下运行它总是给我Use of uninitialized value $_ in substitution (s///) at test.pl line 4, <STDIN> line 1.
有没有人发现这里的错误?我似乎无法这样做。
答案 0 :(得分:2)
您收到的警告是因为您在替换运算符前使用了=
而不是=~
。你需要:
$cutoff =~ s/e-/*10^(-/;
但这不是唯一的问题。您还必须eval
声明才能获得您想要的内容,这不仅是一个糟糕的设计,而且完全没有必要。 Perl本身将"1e-12"
之类的值视为数字,因此您根本不应该使用正则表达式执行此操作。您可以简单地格式化输出:
printf '%d',$val;
这会将1e-2
转换为.01
。如果您需要创建这样的非常长的数字,请查看相应的模块。
答案 1 :(得分:1)
您是否意识到“1e-2”已经是Perl中某个数字的有效格式?你只需要说服Perl将其视为一个数字。
$ perl -E'$x= "1e-2"; say $x'
1e-2
$ perl -E'$x= "1e-2"; $x+=0; say $x'
0.01
为它添加零可确保Perl知道它是一个数字。