ошибка неинициализированного значения в perl

#perl

#perl

Вопрос:

Я довольно новичок в perl (и программировании в целом, но я привык к Python).

 use strict;
use warnings;
use diagnostics;

my $simple_variable = "string";
print my $simple_variable;
  

По сути, я хочу знать, почему этот скрипт возвращает ошибку неинициализированного значения, поскольку переменная четко определена.

Спасибо

Комментарии:

1. Вы узнали об области видимости!! Классические онлайн-ссылки для получения дополнительной информации касаются определения области видимости и часто читаемого узла PerlMonks для определения области видимости переменных в Perl. Я обнаружил, что идентификационный номер узла легко запоминается 🙂

2. Вы хотите print "$simple_variablen"; , чтобы вы поставили это n в конец, потому print что это не делается автоматически для вас.

Ответ №1:

my создает переменную и инициализирует ее как undef (скаляры) или пустую (массивы и хэши). Он также возвращает созданную им переменную.

Как таковой,

 print my $simple_variable;
  

это то же самое, что

 my $simple_variable = undef;
print $simple_variable;
  

Вы хотели сделать

 my $simple_variable = "string";
print $simple_variable;
  

Я не уверен, почему вы спрашиваете об этом, потому что Perl уже сказал вам об этом. Ваша программа выводит следующее:

 "my" variable $simple_variable masks earlier declaration in same scope at a.pl
        line 6 (#1)
    (W misc) A "my", "our" or "state" variable has been redeclared in the
    current scope or statement, effectively eliminating all access to the
    previous instance.  This is almost always a typographical error.  Note
    that the earlier variable will still exist until the end of the scope
    or until all closure referents to it are destroyed.
  

Обратите внимание, как новое объявление приводит к «эффективному устранению всего доступа к предыдущему экземпляру».