1

わかりました、これは少し奇妙で、このように機能するはずはないようです。foreachが別のforeachにネストされており、外側のループに対応する値のみを取得するために必要です。

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

これは機能していないようです。ネストされたループでのスコープについて知っておくべきルールはありますか?テストでは、内部ループに入ると、内部ループが終了するまで$varが存在しなくなることが示されています。

4

3 に答える 3

3

2つの文字列が等しくないかどうかをテストしてから、それらが等しいことを出力しているため、機能していないように見えます。

また、あなたはそれをする必要がありますprint qq(They are equal\n);

ちなみに、スコープに問題はありません。あなたの文字列は、あなたが期待していた結果に応じて、一致するか一致しないかのどちらかです。

于 2011-03-01T19:27:57.100 に答える
2

スコーピングはあなたの問題ではないと思います。neを使用して、「それらは等しい」と印刷しました。それらが等しいことを期待している場合は、eqを使用する必要があります。下記参照:

foreach my $var (@$list){
    foreach my $var2 (@$list2){
        if($var2->[0] eq $var->[0]) {
            print qq(They are equal);
        } else {
            next;
        }
    }
}
于 2011-03-01T19:27:05.457 に答える
0

コードで問題に直面しているので、ここではスコープの問題だと思います。変数をouterforeachに出力すると正しく出力されますが、outerforeach変数をinnerforeach内に出力しようとすると、外部変数の初期化された値のみが出力されます。

于 2013-05-30T06:25:42.323 に答える