【问题标题】:Nested foreach loops in perl and variable scopingperl 和变量作用域中的嵌套 foreach 循环
【发布时间】:2011-07-06 18:24:04
【问题描述】:

好的,这有点奇怪,它似乎不应该以这种方式工作。我有一个嵌套在另一个中的 foreach,我需要它来只获取与外部循环相对应的值。

foreach my $var (@$list)
{
    foreach my $var2 (@$list2)
    {
        if($var2->[0] ne $var->[0])
        {
            print qq(They are equal);
        } else
        {
            next;
        }
    }
}

这似乎不起作用。对于嵌套循环的范围,我应该知道一条规则吗?测试表明,一旦进入内部循环, $var 就会停止存在,直到内部循环退出。

【问题讨论】:

    标签: perl foreach scoping


    【解决方案1】:

    我认为这是范围问题,因为我在代码中遇到了问题。当我在外部 foreach 中打印变量时,它打印正确,但是当我尝试在内部 foreach 中打印外部 foreach 变量时,它只打印外部变量的初始化值。

    【讨论】:

      【解决方案2】:

      这似乎不起作用,因为您正在测试两个字符串是否不相等,然后打印它们是否相等。

      你也应该这样做print qq(They are equal\n);

      顺便说一句,范围界定没有问题。您的字符串匹配或不匹配 - 取决于您期望的结果。

      【讨论】:

      • 谢谢!你是对的,顺便说一句,我还引用了一个没有设置的变量。这是一个真正的新时刻。谢谢指正!
      • @DeepThought: USUW -- use strict; use warnings
      【解决方案3】:

      我不认为范围界定是您的问题。您使用 ne 然后打印“它们是平等的”。如果您希望它们相等,则应使用 eq。见下文:

      foreach my $var (@$list){
          foreach my $var2 (@$list2){
              if($var2->[0] eq $var->[0]) {
                  print qq(They are equal);
              } else {
                  next;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-03-29
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        相关资源
        最近更新 更多