use warnings; use strict; BEGIN { eval { require Scope::Escape }; if($@ ne "") { require Test::More; Test::More::plan(skip_all => "no Scope::Escape"); } Scope::Escape->import(qw(current_escape_function)); } use Test::More tests => 2; BEGIN { use_ok "Scope::Cleanup", qw(establish_cleanup); } my(@events, @value); @events = (); push @events, [ "aa0" ]; @value = do { my $escape = current_escape_function; push @events, [ "bb0" ]; @value = sub { push @events, [ "cc0" ]; @value = do { push @events, [ "dd0" ]; establish_cleanup(sub { push @events, [ "ee0" ]; $escape->("ee1a", "ee1b"); push @events, [ "ee2" ]; }); push @events, [ "dd1" ]; ("dd2a", "dd2b"); }; push @events, [ "cc1", [@value] ]; ("cc2a", "cc2b"); }->(); push @events, [ "bb1", [@value] ]; ("bb2a", "bb2b"); }; push @events, [ "aa1", [@value] ]; is_deeply \@events, [ [ "aa0" ], [ "bb0" ], [ "cc0" ], [ "dd0" ], [ "dd1" ], [ "ee0" ], [ "aa1", [ "ee1a", "ee1b" ] ], ]; 1;