$wrapper = sub { $self->unsubscribe($name => $wrapper); $cb->(@_); }; #### #! perl -slw use strict; use Scalar::Util qw[ weaken ]; sub once { my $wrapper; $wrapper = sub { return $wrapper->(); }; # weaken $wrapper; return $wrapper; } once for 1 .. 1e9;