好的,这有点奇怪,它似乎不应该这样工作。我有一个foreach嵌套在另一个,我需要它只捕获对应外部循环的值。
foreach my $var (@$list)
{
foreach my $var2 (@$list2)
{
if($var2->[0] ne $var->[0])
{
print qq(They are equal);
} else
{
next;
}
}
}
这似乎不起作用。我是否应该了解嵌套循环中的作用域规则?测试表明,一旦输入内部循环,$ var就会停止存在,直到内部循环退出。
答案 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变量时,它只打印外部变量的初始化值。