#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
в конец, потому
Ответ №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.
Обратите внимание, как новое объявление приводит к «эффективному устранению всего доступа к предыдущему экземпляру».