退出while循环if语句为true

时间:2013-08-14 08:08:42

标签: perl loops

我有一个子函数,在其中我正在使用通常的while - 循环逐行读取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 - 循环。

我尝试next ifnext unlesslast - 退出但这不能正常运行,而perldoc声明我们无法使用last对于潜艇。

3 个答案:

答案 0 :(得分: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!";

答案 1 :(得分:0)

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

希望这有帮助。

答案 2 :(得分: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);
}