Если я исправлю кавычки в строке в выражении return
(у вас нет закрывающей двойной кавычки), я получу предупреждение
Переменная «$ number» недоступна в строке 7. source_file.pl.
Причина в том, что лексические значения $app
и $number
определяются во время выполнения, тогда как подпрограмма count_number
определяется намного раньше во время компиляции
Решение состоит в том, чтобы отложить определение count_number
на время выполнения, сделав вместо этого анонимную подпрограмму. Вызов $count_number->()
также необходимо перевести на после определения
my $app = sub {
my $number = 10;
my $count_number = sub {
$number +=10;
};
$count_number->();
return [
'200',
[ 'Content-Type' => 'application/json' ],
[ "{\"number\":$number}" ]
];
};
use Data::Dumper;
print Dumper $app->();
* * Выход тысяча двадцать-один * * одна тысяча двадцать-дв
$VAR1 = [
'200',
[
'Content-Type',
'application/json'
],
[
'{"number":20}'
]
];
Есть соответствующее предупреждение
Переменная «$ number» не будет оставаться общей
с аналогичным решением. Вы можете прочитать об обоих в
perldoc perldiag
. Сообщения перечислены и описаны в алфавитном порядке