У меня проблемы с работой переменных состояния. У меня большой опыт работы с «моими» переменными, но заставить переменные «состояния» работать было нелегко.
Вот минимальный пример для воспроизведения проблемы:
$ perl -e 'use strict; sub test {state $string = ""; print $string; }'
Global symbol "$string" requires explicit package name (did you forget to declare "my $string"?) at -e line 1.
Global symbol "$string" requires explicit package name (did you forget to declare "my $string"?) at -e line 1.
Execution of -e aborted due to compilation errors.
$ perl --version
This is perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread
Согласно документации по ключевому слову state:
state
доступен, только если включено «состояние»feature
или если с префиксомCORE::
. Функция «состояние» включается автоматически с объявлениемuse v5.10
(или выше) в текущей области.
Вот один из способов изменить однострочник, чтобы избежать ошибки:
$ perl -e 'use strict; use feature "state"; sub test {state $string = ""; print $string; }'
В документах упоминается:
Эта функция доступна, начиная с Perl 5.10.
Хотя вы используете Perl версии v5.32.1, которая является более поздней, чем 5.10, по-прежнему необходимо явно включить функцию state
, используя один из методов, показанных в документации. В настоящее время эта функция не включена по умолчанию ни для одной версии Perl.