Я пытаюсь исправить свой код, чтобы позволить Perl восстановить ненужные данные путем ослабления ссылок и повреждения циклов.
Я недавно задал вопрос на том, Как получить доступ к Perl касательно количеств, и ответ работал хорошо на меня.
Для некоторых моих объектов подсчет ссылок> 1, и я не знаю почему.
Существует ли способ для меня добавить обратный вызов или что-то, чтобы помочь мне знать, когда подсчет ссылок увеличен? Я хочу знать, кто ссылается на объект.
Реализовать пакет Devel :: XXX
, который проверяет счетчики ссылок ваших объектов?
package Devel::Something;
# just emulating Devel::Trace here
# see http://cpansearch.perl.org/src/MJD/Devel-Trace-0.10/Trace.pm
sub DB::DB {
if ($Devel::Something::CHECK) {
my ($package, $file, $linenumber) = caller;
... inspect current refcounts
... if any have changed, print out the details
... including current package/file/linenumber
$Devel::Something::CHECK = 0; # disable until it's enabled again
}
}
1;
# my program
... do some stuff ...
$Devel::Something::CHECK = 1;
... do some more stuff ...
$Devel::Something::CHECK = 1;
$ perl -d:Something my_program.pl ...
Вы можете добавить $ Devel :: Something :: CHECK = 1
операторов в соответствующих местах кода или измените условие в DB :: DB
для выполнения через регулярные промежутки времени (например, if (++ $ Devel :: Something :: CHECK% 100 == 0 ) {
для проверки после каждых 100 оценок операторов).
Значения Perl отслеживают только свои ослабленные ссылки, но не жесткие. Похоже, что нет способа добавить обратный вызов для такой мысли. Вам придется проверить счетчики ссылок самостоятельно и сделать расчеты на основе этого.