2011-03-01 60 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變量時,它只打印外部變量的初始化值。