代码之家  ›  专栏  ›  技术社区  ›  user221014

为什么当我把Perl代码放入foreach循环时它就不能工作?

  •  1
  • user221014  · 技术社区  · 16 年前

    此代码正确输出行数组中的标量:

      $line = "This is my favorite test";
      @row = split(/ /, $line);
    
      print $row[0];
      print $row[1];
    

    foreach循环中的相同代码不会打印任何标量值:

      foreach $line (@lines){
          @row = split(/ /, $line);
          print $row[0];
          print $row[1];
      }
    

    是什么导致了这一切?

    我是来自python的Perl新手。我需要为我的新职位学习Perl。

    2 回复  |  直到 16 年前
        1
  •  3
  •   cikkle    16 年前

    正如Jefromi的评论中已经提到的,无论问题是什么,它都存在于您发布的代码之外。这完全可以:

    $lines[0] = "This is my favorite test";
    
    foreach $line (@lines) {
        @row = split(/ /, $line);
        print $row[0];
        print $row[1];
    }
    

    输出为 Thisis

        2
  •  0
  •   brian d foy    16 年前

    当我遇到这些问题时,我想知道为什么块中没有发生某些事情,我会添加一些调试代码以确保我真正进入块:

     print "\@lines has " . @lines . " elements to process\n";
     foreach my $line ( @lines )
          {
          print "Processing [$line]\n";
          ...;
          }
    

    您也可以在自己喜欢的调试器中通过设置断点和检查变量来实现这一点,但这对我来说太多了。:)

    如果您需要学习Perl并且已经了解Python,那么您应该不会遇到太多麻烦 Learning Perl