Perl 如果语句为true,则退出while循环
我有一个子函数,在它里面,我正在用Perl读取一个文件,使用的是通常的Perl 如果语句为true,则退出while循环,perl,loops,Perl,Loops,我有一个子函数,在它里面,我正在用Perl读取一个文件,使用的是通常的,而-逐行循环,因为这是迄今为止我在Perl中知道的唯一(也是最好的?)选项。现在,我正在基于行搜索一个具有循环的关键字,如 my $var; open(FILE, "stuff.dat") while (my $line = <FILE>){ if ($line =~ /regex/) { $var = $1; return $var; } else { retur
,而-逐行循环,因为这是迄今为止我在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);
my$var;
打开(文件“stuff.dat”)
while(我的$line=){
如果($line=~/regex/){
$var=$1;
返回$var;
}否则{
return“未定义var!”;
}
}
关闭(文件);
但即使它获取关键字并指定了$var
,它也会在下一行被覆盖。因此,如果找到关键字并且定义了$var
,我想退出while
-循环
我尝试了next if
或next,除非或last
-退出,但这无法正常工作,并声明无法对subs使用last
。打开(我的$FILE,打开(FILE,“stuff.dat”)
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!";
我的$var;
while(我的$line=){
如果($line=~/regex/){
$var=$1;
最后;
}
}
关闭(文件);
返回$var;
希望这有帮助。您可以将regexp求值添加到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);
}
子检查\u文件{
打开(文件“stuff.dat”)或死亡;
我的$result;
我的美元线;
而($line=)&&($result=($line!~m/regex/)){};
关闭(文件);
##$result仅当我们退出循环并
##直到文件的最后一行才找到匹配项
返回($result!=1);
}
如果正则表达式不匹配,这将不起作用。这是我想要避免的行为。不幸的是,这会使文件
文件句柄在子文件完成后打开。这可以通过使用词法文件句柄来解决。
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);
}