Regex Perl中用于Evalue替换的正则表达式
我试图实现的是将评估值1e-2转换为0.01。Regex Perl中用于Evalue替换的正则表达式,regex,perl,Regex,Perl,我试图实现的是将评估值1e-2转换为0.01。 my $cutoff = "1e-12"; if ($cutoff =~ m/^\de-{1}\d+?$/){ $cutoff = s/e-/*10^(-/; $cutoff .= ")"; } print "$cutoff\n"; 这是一个更大脚本的一部分,在use warnings下运行它总是让我在test.pl第4行第1行的替换中使用未初始化的值$。 有人在这里发现错误了吗?我似乎不能这样做 得到的警告是因为
my $cutoff = "1e-12";
if ($cutoff =~ m/^\de-{1}\d+?$/){
$cutoff = s/e-/*10^(-/;
$cutoff .= ")";
}
print "$cutoff\n";
这是一个更大脚本的一部分,在use warnings下运行它代码>总是让我在test.pl第4行第1行的替换中使用未初始化的值$。
有人在这里发现错误了吗?我似乎不能这样做 得到的警告是因为在替换运算符前面使用了=
而不是=~
。你需要:
$cutoff =~ s/e-/*10^(-/;
但这不是这里唯一的问题。您还必须eval
语句才能得到您想要的,这不仅是一个糟糕的设计,而且完全没有必要。Perl本机将“1e-12”
之类的值视为数字,因此您根本不应该使用正则表达式来执行此操作。您只需格式化输出:
printf '%d',$val;
将1e-2
转换为.01
。如果您需要创建这样的很长的数字,请查看适当的模块。您收到的警告是因为您在替换运算符前面使用了=
,而不是=~
。你需要:
$cutoff =~ s/e-/*10^(-/;
但这不是这里唯一的问题。您还必须eval
语句才能得到您想要的,这不仅是一个糟糕的设计,而且完全没有必要。Perl本机将“1e-12”
之类的值视为数字,因此您根本不应该使用正则表达式来执行此操作。您只需格式化输出:
printf '%d',$val;
将1e-2
转换为.01
。如果您需要创建这样的很长的数字,请查看适当的模块。您收到的警告是因为您在替换运算符前面使用了=
,而不是=~
。你需要:
$cutoff =~ s/e-/*10^(-/;
但这不是这里唯一的问题。您还必须eval
语句才能得到您想要的,这不仅是一个糟糕的设计,而且完全没有必要。Perl本机将“1e-12”
之类的值视为数字,因此您根本不应该使用正则表达式来执行此操作。您只需格式化输出:
printf '%d',$val;
将1e-2
转换为.01
。如果您需要创建这样的很长的数字,请查看适当的模块。您收到的警告是因为您在替换运算符前面使用了=
,而不是=~
。你需要:
$cutoff =~ s/e-/*10^(-/;
但这不是这里唯一的问题。您还必须eval
语句才能得到您想要的,这不仅是一个糟糕的设计,而且完全没有必要。Perl本机将“1e-12”
之类的值视为数字,因此您根本不应该使用正则表达式来执行此操作。您只需格式化输出:
printf '%d',$val;
将1e-2
转换为.01
。如果您需要创建这样的很长的数字,请查看适当的模块。您是否意识到“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知道它是一个数字。您是否意识到“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知道它是一个数字。您是否意识到“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知道它是一个数字。您是否意识到“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知道它是一个数字。是$cutoff=s/e-/*10^(-/;
应该是$cutoff=~s/e-/*10^(-/;
)?谢谢@Biffen…这是个错误。注意:整个代码应该$cutoff=~s/^(\d)e(-\d+)/$1*10^($2)/
。不要愚蠢地匹配m//,然后再匹配s//。@ikegami谢谢你的建议。下次会被采纳,但我已经用dan1111的方法解决了这个问题。$cutoff=s/e-/*10^(-/;
应该是$cutoff=~s/e-/*10吗^(/;
?谢谢@Biffen…那是个错误。注意:整个代码应该$cutoff=~s/^(\d)e(-\d+)$/$1*10^($2)/;
。不要愚蠢地匹配m//,然后再匹配s//。@ikegami谢谢你的建议。下次会被采纳,但我已经用dan1111的方法解决了这个问题。是$cutoff=s/e-/*10吗^(/;
应该是$cutoff=~s/e-/*10^(-/;
?谢谢@Biffen…这是个错误。注意:整个代码应该$cutoff=~s/^(\d)e(-\d+)$/$1*10^($2)/
。不要愚蠢地匹配m//,然后再匹配s//。@ikegami谢谢你的建议。下次会被采纳,但我已经用dan1111的方法解决了这个问题。$cutoff=s/e-/*10^(-/;
应该是$cutoff=~s/e-/*10吗^(/;
?谢谢@Biffen…这是个错误。注意:整个代码应该$cutoff=~s/^(\d)e(-\d+)$/$1*10^($2)/
。不要愚蠢地匹配m//,然后再匹配s//。@ikegami谢谢你的建议。下次会被采纳,但我已经用dan1111的方法解决了这个问题。理想情况下,你应该概述一下我需要使用$cutoff=sprintf('%df',$cutoff)
使用d=any integer
以便在我的脚本中进一步使用它!尽管如此,我还是接受它作为正确答案。理想情况下,您应该概述我需要使用$cutoff=sprintf('%df',$cutoff)
使用d=any integer
以便在我的脚本中进一步使用它!尽管如此,我还是接受它作为正确答案。理想情况下,您应该概述我需要使用$cutoff=sprintf('%df',$cutoff)
使用d=any integer
以便在我的脚本中进一步使用它!尽管如此,我还是接受它作为正确答案。理想情况下,您应该已经概述了
$ perl -E'$x= "1e-2"; say $x'
1e-2
$ perl -E'$x= "1e-2"; $x+=0; say $x'
0.01