我有一个子函数,在其中我正在使用通常的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 if
或next unless
或last
- 退出但这不能正常运行,而perldoc声明我们无法使用last
对于潜艇。
答案 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);
}