2014-10-18 76 views
0

我不確定這段代碼發生了什麼,我認爲它與我的變量的作用域有關,但是將它們從「我的」更改爲「我們的」沒有做任何事情。錯誤出現在第二個if block中,我試圖讓它打印$ question1,perl說「$ question1需要特定的包名」。這裏的代碼只是測試我在程序後面需要做什麼。我只需要$ question變量即可在整個程序中使用。perl中的變量範圍問題

foreach my $line (split /:/, $test) { 
    my $match1 = "1"; 
    my $match2 = "2"; 

    if ($line =~ /$match1/) { 
     my $question1 = $line; 
     print "$question1\n"; 
    } 

    if ($line =~ /$match2/) { 
     my $question2 = $line; 
     print "$question2\n"; 
     print "$question1\n"; 
    } 
} 
+0

你有沒有想過通過這個?如果'$ match1'不匹配和'$ match2'確實會打印'$ question1'的值? – reinierpost 2014-10-18 20:06:57

回答

2

要增加一個變量的範圍超出了一定的塊,你需要移動的聲明塊之外,像這樣:

my ($question1, $question2);  # both are now initialized to undef 

foreach my $line (split /:/, $test) { 
    my $match1 = "1"; 
    my $match2 = "2"; 

    if ($line =~ /$match1/) { 
     $question1 = $line;  # NOT declaring with 'my', JUST assigning 
    } 

    if ($line =~ /$match2/) { 
     $question2 = $line;  # NOT declaring with 'my', JUST assigning 
    } 
} 
+0

謝謝,這使得更多的意義和作品! – kspaeth 2014-10-18 20:54:19

+0

@ user3375810:不客氣! – ruakh 2014-10-18 21:14:04