【发布时间】:2011-07-22 12:18:15
【问题描述】:
我正在读取一个文件并执行一个 while 循环以迭代地运行文件中的每一行。在 while 循环中,我有一个 if 条件,它有一个嵌套的 for 循环,它执行一些过程。发生的情况是,尽管保持 while 循环运行的条件仍然有效,但一旦 for 循环完成,代码就会退出。
my $datafile = "data.txt";
open my $fh, "<", $datafile or die "Failed to open $datafile ($!)";
my $csv = Text::CSV->new() or die "Failed to create Text::CSV object";
my $line = <$fh>;
while ($line = <$fh>)
{
blah blah
blah blah
if ($foo > $cow) {
blah
} elsif ($foo == $cow) {
blah
} else {
for ($i =1; $i <= $something; $i++) {
blah blah
}
}
}
问题是代码没有完成遍历 data.txt 文件的每一行。代码在 for 循环结束后退出。
任何见解将不胜感激。谢谢。
【问题讨论】:
-
for循环的内部在做什么?如果它在列表上下文中从<$fh>读取,它将消耗整个文件。 -
您没有向我们展示您的代码有错误的部分,所以我们只能猜测。在 for 循环后面加上 print 语句,看看你的程序是否意外退出。
-
太多等等,没有足够的代码实际上是问题所在。您可能希望使用 Text::CSV getline 方法将您的行直接读入 Txt::CSV 对象。还可以考虑使用简单的 foreach 或 while 而不是 C 风格的 for 循环。
标签: perl loops for-loop nested while-loop