Perl:String to Scalar变量

时间:2014-01-27 13:08:36

标签: perl

有人可以帮我解决以下问题: 我想从输入文件中提取数值并执行数学运算。

输入文件样本

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

我想将text0和text1收集到具有相同名称和

的变量中

打印“$ 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";

对我的基本代码的任何改进也都会受到影响。

问候

3 个答案:

答案 0 :(得分:0)

至少,您需要在匹配测试中为“起始线”(这是一个插入符号)添加一个锚:

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

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

答案 1 :(得分:0)

此代码段会逐行读取您的输入,如果找到匹配项,则会将text0 =后面的任何数字指定给变量$text1text1也会相同。然后它在循环外打印两个变量:

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";

答案 2 :(得分:0)

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