We probably use this idiom elsewhere, but having this method
around to make future use cases more readable is probably prudent.
-# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
package PublicInbox::OnDestroy;
+use v5.12;
sub new {
shift; # ($class, $cb, @args)
bless [ @_ ], __PACKAGE__;
}
+sub cancel { @{$_[0]} = () }
+
sub DESTROY {
my ($cb, @args) = @{$_[0]};
if (!ref($cb) && $cb) {
#!perl -w
-use strict;
-use v5.10.1;
+use v5.12;
use Test::More;
require_ok 'PublicInbox::OnDestroy';
my @x;
undef $od;
is($tmp, $$, '$tmp set to $$ by callback');
+$od = PublicInbox::OnDestroy->new($$, sub { $tmp = 'foo' });
+$od->cancel;
+$od = undef;
+isnt($tmp, 'foo', '->cancel');
+
if (my $nr = $ENV{TEST_LEAK_NR}) {
for (0..$nr) {
$od = PublicInbox::OnDestroy->new(sub { @x = @_ }, qw(x y));