0

我有一个子函数,在其中我正在使用通常的while-loop 逐行读取 Perl 中的文件,因为这是迄今为止我在 Perl 中知道的唯一(也是最好的?)选项。现在我正在基于行搜索带有循环的关键字

my $var;
open(FILE, "stuff.dat")
while (my $line = <FILE>){
   if ($line =~ /regex/) {
      $var = $1;
      return $var;
   } else {
      return "var is not defined!";
   }
}
close(FILE);

但即使它获得关键字并被$var指定,它也会在下一行被覆盖。while因此,如果找到并$var定义了关键字,我想退出-loop。

我尝试了next ifornext unlesslast-exit 但这不能正常工作,并且perldoc声明我们不能last用于 subs。

4

3 回答 3

1
open(my $FILE, "<", "stuff.dat") or die $!;
while (my $line = <$FILE>){
   if ($line =~ /regex/) {
      return $1 if defined $1;
   }
}
close($FILE);
return "var is not defined!";
于 2013-08-14T08:15:44.657 回答
0
open(FILE, "stuff.dat")
my $var;
while (my $line = <FILE>){
   if ($line =~ /regex/) {
      $var = $1;
      last;
}
}
close(FILE);
return $var;

希望这可以帮助。

于 2013-08-14T08:15:50.377 回答
0

您可以将正则表达式评估添加到 while 循环条件,而无需使用 return 或 last。

sub check_file {
    open(FILE, "stuff.dat") or die;

    my $result;
    my $line;

    while (($line = <FILE>) && ($result = ($line !~ m/regex/))) {};

    close(FILE);
    ## $result equals 1 only if we have exit the loop and 
    ## didn't have a match till the last line of the file
    return ($result != 1);
}
于 2013-08-14T10:18:20.927 回答