perl和变量作用域中的嵌套foreach循环

时间:2011-03-01 19:21:52

标签: perl foreach scoping

好的,这有点奇怪,它似乎不应该这样工作。我有一个foreach嵌套在另一个,我需要它只捕获对应外部循环的值。

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

这似乎不起作用。我是否应该了解嵌套循环中的作用域规则?测试表明,一旦输入内部循环,$ var就会停止存在,直到内部循环退出。

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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