perl中的变量范围问题

时间:2014-10-18 18:27:19

标签: perl scope

我不确定这段代码是怎么回事,我相信它与我的变量的范围有关,但是从"我的"到"我们的"没有做任何事情。错误出现在第二个if块中,我试图让它打印$ question1,perl说" $ question1需要一个特定的包名"。那里的代码只是对我稍后在程序中需要做的测试。我只需要$ question变量就可以在整个程序中使用。

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";
    }
}

1 个答案:

答案 0 :(得分: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
    }
}