2011-03-01 99 views
1

好吧,这有点奇怪,它似乎不应该这样工作。我有一个嵌套在另一个foreach,我需要它只抓取对应于外部循环的值。Perl中的嵌套foreach循环和变量范围

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

这似乎没有工作。是否有一条规则我应该知道在嵌套循环中进行作用域?测试显示,一旦输入内部循环,$ var就会停止存在,直到内部循环退出。

回答

3

这似乎不是两个字符串是否不等于进行工作,因为你正在测试,然后打印,他们是平等的。

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

顺便说一句,没有与作用域没有问题。您的字符串匹配或不匹配 - 取决于您期待的结果。

+0

谢谢!你是对的,顺便说一句,我也在引用一个没有被设置的变量。这是一个真正的新时刻。感谢您的更正! – 2011-03-01 19:32:04

+3

@DeepThought:USUW - 'use strict;使用警告“ – Axeman 2011-03-01 19:35:12

2

我不认为范围是你的问题。你用ne然后打印出“他们是平等的”。如果你期望他们是平等的,你应该使用eq。请看下图:

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

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