2014-10-18 83 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