2014-10-18 2 views
0

Я не уверен, что происходит с этим кодом, я считаю, что это имеет какое-то отношение к тому, как меняются мои переменные, но изменение их с «моего» на «наш» ничего не делает , Ошибка возникает во втором блоке, где я пытаюсь заставить его печатать $ 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

Задумывались ли Вы это через? Какую ценность '$ question1' вы ожидаете напечатать в случае, если' $ match1' не соответствует, а '$ match2'? – reinierpost

ответ

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

+0

@ user3375810: Добро пожаловать! – ruakh

Смежные вопросы