$hook - "наш" собственный указатель на хук. Чтоб, передав его delHooks, мы могли удалить хук из "таблицы хуков ОК" (если просто присвоить $hook = "", удалится только "наш" указатель). После этого этот указатель доступен (как любая другая "наша" переменная), но бесполезен (по крайней мере для функции delHooks).
Добавлено спустя 9 минут 58 секунд:
Код: Выделить всё
sub addHook {
# ...
my $hookList = $hooks{$hookName} ||= new ObjectList();
# ...
$handle[INDEX] = $hookList->add(bless(\@entry, "Plugins::HookEntry"));
# ...
return bless(\@handle, 'Plugins::HookHandle');
}
HookHandle создаётся (bless) и HookEntry вносится в список (add).
Код: Выделить всё
sub delHook {
# ...
$hookList->remove($entry);
# ...
delete $handle->[HOOKNAME];
delete $handle->[INDEX];
# ...
}
HookEntry убирается из списка, HookHandle не удаляется (удаляются только его поля).
Т.е. после удаления хука у нас остаётся указатель на пустой объект.