「include」を含む最初の行にスキップしたい。
<> until /include/;
これが機能しないのはなぜですか?
match 演算子のデフォルトは usingです$_が、 while ループで使用されない限り、<>演算子はデフォルトでに格納されないため、 には何も格納されません。$_$_
からperldoc perlop:
I/O 演算子
...
通常は戻り値を変数に代入する必要がありますが、
は、自動割り当てが発生する状況の 1 つです。場合に限り
入力記号は、「while」の条件内の唯一のものです
ステートメント ("for(;;)" ループに偽装されていても) の場合、値は auto-
グローバル変数 $_ に動的に割り当てられ、
以前そこに。(これは奇妙に思えるかもしれませんが、
あなたが書くほぼすべての Perl スクリプトでこの構文を使用してください。) $_ 変数
able は暗黙的にローカライズされていません。「ローカル $_;」を配置する必要があります。
あなたがそれをしたい場合は、ループの前に。
次の行は同等です。
while (defined($_ = )) { 印刷; }
while ($_ = ) { print; }
while () { 印刷; }
(;;) {印刷; }
print while defined($_ = );
印刷しながら ($_ = );
しながら印刷します。
これも同様に動作しますが、 $_ を避けます:
while (my $line = ) { print $line }
<>構成内の魔法にすぎませんwhile(<>)。それ以外の場合は に割り当てられない$_ため、/include/正規表現には一致するものがありません。これを-wPerl で実行すると、次のように表示されます。
Use of uninitialized value in pattern match (m//) at ....
これは次の方法で修正できます。
$_ = <> until /include/;
警告を回避するには:
while(<>)
{
last if /include/;
}