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

perl中的嵌套foreach循环和变量作用域,perl,foreach,scoping,Perl,Foreach,Scoping,好吧,这有点奇怪,它似乎不应该这样工作。我有一个foreach嵌套在另一个foreach中,我需要它只获取对应于外部循环的值 foreach my $var (@$list) { foreach my $var2 (@$list2) { if($var2->[0] ne $var->[0]) { print qq(They are equal); } else {

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

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

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

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

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

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

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

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

您还应该使
打印qq(它们相等\n)


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

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

您还应该使
打印qq(它们相等\n)


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

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

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

谢谢!你是对的,顺便说一句,我还引用了一个未设置的变量。这真是一个新的时刻。谢谢你的更正@深思熟虑:通常--
严格使用;使用警告
谢谢!你是对的,顺便说一句,我还引用了一个未设置的变量。这真是一个新的时刻。谢谢你的更正@深思熟虑:通常--
严格使用;使用警告