Статические константы perl

Можно ли объявить статические константы hashrefs в Perl? Я попробовал это с модулями Readonly и Const::Fast следующим образом, но получаю сообщение об ошибке "Попытка переназначить переменную только для чтения", когда я вызываю подпрограмму несколько раз.

use Const::Fast;
use feature 'state';

sub test {
  const state $h => {1 => 1};
  #...
}

1 ответ

Решение

const это функция, и вы вызываете ее каждый раз test называется. Это должно сделать свое дело.

sub test {
   state $h;
   state $initialized;
   const $h => ... if !$initialized++;
   # ...
}

поскольку $h всегда имеет истинное значение, мы можем использовать следующее:

sub test {
   state $h;
   const $h => ... if !$h;
   # ...
}

Конечно, вы все еще можете использовать старый способ создания постоянных переменных в лексической области.

{
   const my $h => ...;

   sub test {
      # ...
   }
}
Другие вопросы по тегам