2014-03-12 49 views
0

我寫了一個代碼,它允許我從數組中的一個元素中減去一個特定值(例如:FP = 0.021),如果它匹配特定的模式。這是代碼:從數組元素perl減去模式匹配

if ($info =~ /FP=/) { 
      my @array1 = split(';', $info); 
       if ($array1[$#array1] =~ /=([^.]*)/){ 
        my $name1= $-[1]; 
        $FPvalue = substr($array1[$#array1], $name1); 
        if ($FPvalue < 0.0001){ 
         push(@FPvalues,$FPvalue); 

其中$ info是一個字符串,其中包含由分號(;)分隔的信息。

我很幸運,「FP = 0.021」元素是我陣列中的最後一個元素。但我想知道一種方法來減去它,而不使用表達式:$ array1 [$#array1]

我會感謝您的幫助,謝謝!

+1

好吧,一種方法是將它從數組的堆棧中彈出,雖然這實際上是一個廉價的黑客攻擊,只是爲了擺脫「最後」元素的這個實例。 – alexmac

回答

1

這是很難說沒有取樣輸入數據,但我想你想

push @FPvalues, $1 if $info =~ /FP=([\d.]+)/ 

它通過搜索$info中的字符串來搜索序列FP=,後面跟着多個點和小數位。如果找到該圖案,則將點和數字部分放入$1並推入陣列。

+0

它的作品,非常感謝你! – userbio

1

在這裏,您如何解析字符串中的十進制數,因爲它駐留在字符串的結尾:

$str = "asdsa;adsasd;adsasd;FP=0.021"; 
if($str =~ /=(\d+\.?\d+)$/){ 
    print $1; 
} 
+0

它的作品,非常感謝你! – userbio