it's a good idea for it to avoid closing over $self.
[I didn't study the OP's code, so this may or may not be pertinent, but I think it is.]
When you have an object that calls a callback, it's a good idea to pass the object to the callback as an argument.
For example, say there's a class that calls a function periodically.
The following exhibits a circular reference:
my $timer; $timer = Timer->new( callback => sub { ... if (...) { $timer->cancel; } ... }, period => 5, )
The following doesn't exhibit a circular reference:
my $timer = Timer->new( callback => sub { my ($timer) = @_; ... if (...) { $timer->cancel; } ... }, period => 5, )
The latter requires that Timer passes a reference to itself to the callback.
In reply to Re^2: Avoiding circular references
by ikegami
in thread Avoiding circular references
by frazap
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |