【问题标题】:Why does this for loop inside while exit before the while condition?为什么这个 for 在 while 条件之前在 while 内循环?
【发布时间】: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 循环的内部在做什么?如果它在列表上下文中从&lt;$fh&gt; 读取,它将消耗整个文件。
  • 您没有向我们展示您的代码有错误的部分,所以我们只能猜测。在 for 循环后面加上 print 语句,看看你的程序是否意外退出。
  • 太多等等,没有足够的代码实际上是问题所在。您可能希望使用 Text::CSV getline 方法将您的行直接读入 Txt::CSV 对象。还可以考虑使用简单的 foreach 或 while 而不是 C 风格的 for 循环。

标签: perl loops for-loop nested while-loop


【解决方案1】:

我建议您使用调试器来查看发生了什么。 perldoc perldebug

【讨论】:

  • 感谢亚历克斯的指导。我确实使用了调试器并弄清楚发生了什么。对不起,愚蠢的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
相关资源
最近更新 更多