Как упоминалось в комментариях, сборка мусора в Perl является механизмом пересчета и запускается значением, на которое больше не ссылается что-либо (независимо от того, хранится ли переменная, в которой go может выходить из области видимости или быть назначенной). другое значение, операция, частью которой он является, стек вызовов подпрограммы, в который он передается, или фактическая ссылка ).
Таким образом, чтобы предотвратить очистку значения до завершения программы самый простой способ - сделать противоположность общепринятому пониманию памяти: ссылаться на значение из глобальной системы sh.
our $foo = \$something_to_keep_alive;
В качестве альтернативы, вы можете (ab) использовать тот факт, что циклические ссылки будет препятствовать уменьшению счетчиков ссылок до глобального уничтожения.
$something->{self} = $something;
Это заставит значение ссылаться на себя, даже если оно выполнено через другой слой, пока одна из ссылок в цикле не будет ослаблена, удалена или глобальное уничтожение достигнуто И опять же, безусловно, чего-то, чего следует избегать в обычных обстоятельствах, так как это утечка памяти по своему проекту.