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定義されている場合は、ループを終了したいと思います。

next ifornext unlessまたは-exitを試しlastましたが、これは適切に機能せず、perldocはサブルーチンには使用できないと述べていますlast

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

return または last を使用せずに、while ループ条件に正規表現の評価を追加できます。

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 に答える
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 に答える