gpt4 book ai didi

Perl while循环/读取文件

转载 作者:行者123 更新时间:2023-12-02 07:13:24 26 4
gpt4 key购买 nike

我是 Perl 的新手,在逐行读取文件时遇到问题。我从一个建议使用 while 循环的教程开始。效果很好,但是我希望有一个选项可以在出现错误时跳出循环。我知道我可以使用“last”关键字,但我不太喜欢它,我想将它包含在 while 循环的 bool 表达式中,以便更容易看到它在什么条件下停止。所以我做了

$error=0;
while ( (!$error) && (<MYFILE>) ) {
print $_;
...
}

不幸的是,这不起作用,因为 $_ 似乎包含一个“未初始化的值”。出于某种原因,当我将 (!$error) 更改为 (!0) 时,它再次起作用。我会明白如果我使用 || 它是行不通的因为惰性评估,但在这种情况下,&& 双方都需要评估,所以我不明白为什么它不初始化 line 变量。

最佳答案

$_ 的神奇赋值只有在循环中没有其他内容时才会发生:

while (<MYFILE>) {
print $_;
...
}

如果你也想要错误测试——不推荐——那么你需要做作业:

my $error = 0;
while (!$error && ($_ = <MYFILE>)) {
print;
$error = 1 if m/quit/i;
}

不要忘记添加:

use warnings;
use strict;

带有 '!0' 的版本之所以起作用,可能是因为 Perl 优化并认识到 '!0' 始终为真并将其从循环中删除,只留下 I/O 运算符,然后分配给 $_

注意:最好使用惯用的 Perl 和 last 语句:

while (<MYFILE>) {
print;
last if m/quit/i;
}

关于Perl while循环/读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com