if-condition的grep关键字

时间:2013-07-30 13:05:34

标签: perl if-statement grep

我有一个带

的输入文件
words;
yadda yadda;
keyword 123;
yadda;

我想简单地将值123保存为变量。我尝试了here的解决方案:

my $var;
open(FILE,$data.dat) or die "error on opening $data: $!\n";
while (my $line = <FILE>) {
        if (/^keyword/) {
                $var = $1;
                print $line;
                last;
        }
}
close(FILE);

这不起作用并且给我出现以下错误:Use of uninitialized value $_ in pattern match (m//) at ./script.pl line 91, <FILE> line 384.(这适用于<FILE>的所有行

我找到了另一个没有if条件的解决方案,它只是说@string = sort grep /^keyword/,<FILE>;并且有效。你能告诉我这里发生了什么吗?

/编辑

谢谢答案和解释!您认为更好/更优雅的方式是什么? grep或if条件?

2 个答案:

答案 0 :(得分:2)

$1指的是第一个捕获组,但是你的正则表达式不包含任何捕获组,所以它是未定义的。尝试

if ($line =~ /^keyword\s+(-?(?:\d+|\d*\.\d*)(?:[Ee]-?(?:\d+|\d*\.\d*))?)/) {

另请注意,正则表达式正在应用于包含您刚读过的行的变量。

编辑:更新以应对科学记数法中的数字。这是一个重要的附加要求,您应该首先明确指定。

答案 1 :(得分:2)

您需要进行以下更改:

if ($line =~ m/^keyword\s+(\d+)/)

说明:你读入$ line,因此$ _这是匹配的默认目标是未定义的。 此外,您还会收到$ 1的另一个错误,因为您的模式未指定捕获组。

相关问题