AnyEvent::Util::guard を使ってみる修行

AnyEvent::Util::guard を使ってみる。

use strict;
use warnings;

use AnyEvent::Util;

sub gen {
    my $n = shift;
    my $guard = AnyEvent::Util::guard {
        print "terminated $n.\n";
    };
    print "created $n.\n";
    $guard;
}

print "start\n";
{
    my $guard_0 = gen 0;
    my $guard_1 = gen 1;
    {
        my $guard_2 = gen 2;
    }                        # ここで 2 が破棄される 
    undef $guard_0;          # ここで 0 が破棄される
    my @queue = ( gen 3 );
}                            # ここで 1, 3 が破棄される
print "end.\n";

実行結果。

[takeyuki@sunya ~]$ perl a.pl
start
created 0.
created 1.
created 2.
terminated 2.
terminated 0.
created 3.
terminated 1.
terminated 3.
end.