2014-01-27 3 views
0

Помог ли кто-нибудь мне в следующем: Я хочу извлечь числовые значения из входного файла и выполнить математические операции.Perl: String to Scalar variable

образец входного файла

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

Я хочу, чтобы собрать text0 и text1 в переменные с тем же именем и

печати "$ text0/text1";

в конце файла с чтением. Обратите внимание, что текст1 является частью строки другой части файла и должен быть проигнорирован.

Я работал с этим кодом, но не из-за «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 
Смежные вопросы