簡體   English   中英

用於Perl中Evalue替換的正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM