2014-01-27 105 views
0

有人可以幫我解決以下問題: 我想從輸入文件中提取數值並執行數學運算。Perl:將字符串轉換爲標量變量

輸入文件樣本

string txt 
    text0 = 40, 
    text1 = 2; 
    string text1 txt 

我想收集text0和文本1到具有相同的名稱和

打印 「$ text0/text1」 中的變量;

在文件讀取結束時。請注意,text1是文件其他部分字符串的一部分,需要忽略。

我與此代碼工作,但失敗了,因爲在代碼的其他部分「text1」中的,

while (<PH>) { 
chomp; 
if ($_ =~ "text0") { 
    my $data = $_; 
    my @temp = split (' ', $data); 
    $text0 = $temp[2]; 
    $text0 =~ s/,//; 
} 
if ($_ =~ "text1") { 
    my $data = $_; 
    my @temp = split (' ', $data); 
    $text1 = $temp[2]; 
    $text1 =~ s/;//; 

} 
    } 
    my $final = $text0/text1; 
    print "$final\n"; 

任何改善我的基本代碼也將appriciated。

問候

+1

這是一個「標」 – ikegami

回答

0

最起碼,你需要把一個錨「行首」(這是一個插入符號)在您的匹配測試:

if ($_ =~ "^text0") { 

if ($_ =~ "^text1") { 
+0

爲什麼downvote? –

0

這段代碼將逐行讀取您的輸入,並將text0 =後面的任何數字分配給變量$text1,如果找到匹配,則text1 。然後它打印在循環外兩個變量:

use warnings; 
use strict; 

open my $input, '<', 'in.txt'; 

my ($text1, $text2); 
while(<$input>){ 
    chomp; 
    ($text1) = $1 if /text0 = (\d+)/; 
    ($text2) = $1 if /text1 = (\d+)/; 
} 

print "Text0 = $text1\nText1 = $text2\n"; 
+0

這個工作適合你嗎? – fugu

0
perl -lne '$1==1?(print $a/$2):($a=$2) if(/text([0-1]) = ([\d]+)/);' your_file