не может получить доступ к переменной внутри цикла while (в perl) - PullRequest
0 голосов
/ 22 марта 2011

Очень простой вопрос о области видимости переменных. У меня есть переменная, определенная в основном коде, который я использую внутри цикла while.

my $my_variable;
while(<FILE>) {
   ...using $my_variable
}
if ($my_variable) -> FAILS

Когда я выхожу из цикла и использую переменную, я получаю сообщение об ошибке:

Use of uninitialized value $my_variable

Даже если я заключаю переменную в пустой блок, я следую с ошибкой.

{
    my $my_variable;
    while(<FILE>) {
       ...using $my_variable
    }
    if ($my_variable) -> FAILS
}

Есть предложения?

Ответы [ 3 ]

1 голос
/ 22 марта 2011
  • Используете ли вы $my_variable в цикле или вы переопределили его как my $my_variable где-то в цикле.Вы будете удивлены, насколько легко my переходит к присвоению переменной.

    У меня даже есть частый тик в моем коде, где я пишу что-то вроде

     my $hash{ $key } = ... some elaborate assignment;
    
  • Кроме того, if не должен жаловаться на неинициализированную переменную.undef => Boolean false.

  • Я бы не стал беспокоиться об инициализации всех моих переменных, но крайне важно, чтобы вы научились думать о том, как использовать undefs.И всегда , всегда USUW (use strict; use warnings), чтобы переменные не были инициализированы, когда вы не ожидаете, что они будут.
1 голос
/ 22 марта 2011

Вы когда-нибудь назначали на $my_variable? Все, что вы показываете, это объявление (my) и использование (if), но никогда не назначение.

0 голосов
/ 22 марта 2011

В приведенных примерах вы не инициализировали $my_variable, поэтому он не определен после цикла while.

Вы можете сделать my $my_variable = ''; непосредственно перед циклом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...