我想跳到包含“include”的第一行。
<> until /include/;
为什么这不起作用?
match 运算符默认为 using $_,但默认情况下该<>运算符不会存储到$_其中,除非它在 while 循环中使用,因此没有任何内容存储在$_.
来自perldoc perlop:
I/O 操作符
...
通常你必须将返回的值赋给一个变量,但是
是发生自动分配的一种情况。当且仅当
输入符号是“while”条件内的唯一内容
语句(即使伪装成“for(;;)”循环),值是自动的
自动分配给全局变量 $_,销毁所有
以前有。(这对你来说可能看起来很奇怪,但你会
几乎在您编写的每个 Perl 脚本中都使用该结构。) $_ 变量
能够不是隐式本地化的。您必须输入“本地 $_;”
如果您希望发生这种情况,请在循环之前。
以下几行是等效的:
而 (定义($_ = )) { 打印; }
而 ($_ = ) { 打印; }
while () { 打印;}
对于 (;;) { 打印; }
定义时打印($_ = );
打印而 ($_ = );
打印而;
这也表现类似,但避免了 $_ :
而 (我的 $line = ) { 打印 $line }
<>只是while(<>)构造中的魔法。否则它不会分配给$_,因此/include/正则表达式没有可匹配的内容。如果你用-wPerl 运行它会告诉你:
Use of uninitialized value in pattern match (m//) at ....
您可以使用以下方法解决此问题:
$_ = <> until /include/;
为了避免警告:
while(<>)
{
last if /include/;
}