The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;

use Test::More tests => 6;

use Protect::Unwind;


my $i = 0;

is($i++, 0, 'start');

func(sub {
  is($i++, 3, 'callback called from func');
  goto ESCAPE;
});

ESCAPE:
is($i++, 5, 'all done');

exit;


sub func {
  my $cb = shift;
  is($i++, 1, 'inside func');
  protect {
    is($i++, 2, 'inside protected sub');
    $cb->();
    die "shouldn't happen: skipped with goto";
  } unwind {
    is($i++, 4, 'inside unwinding sub');
  };
}