[英]Regex for Evalue substitution in Perl
我想要實現的是將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 warnings;
總是給我Use of uninitialized value $_ in substitution (s///) at test.pl line 4, <STDIN> line 1.
有人在這里發現錯誤嗎? 我似乎無法做到。
您得到的警告是因為您在替換運算符前面使用了=
而不是=~
。 你需要:
$cutoff =~ s/e-/*10^(-/;
但這不是這里唯一的問題。 您還必須eval
該語句以獲得所需的內容,這不僅是一個糟糕的設計,而且完全沒有必要。 Perl本機將像"1e-12"
類的值視為數字,因此您根本不需要使用正則表達式。 您可以簡單地格式化輸出:
printf '%d',$val;
這會將1e-2
轉換為.01
。 如果您需要像這樣創建非常長的數字,請查看適當的模塊。
您是否意識到Perl中“ 1e-2”已經是數字的有效格式? 您只需要說服Perl將其視為數字即可。
$ perl -E'$x= "1e-2"; say $x'
1e-2
$ perl -E'$x= "1e-2"; $x+=0; say $x'
0.01
向其添加零可確保Perl知道它是一個數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.