use strict;
use warnings;
my $timed_out = 1;
TIMEOUT_BLOCK_WITH_UNIQUE_LABEL: {
local $SIG{ALRM} = sub {
last TIMEOUT_BLOCK_WITH_UNIQUE_LABEL;
};
my $err;
eval {
alarm( 1 );
do_work();
1
} or do {
$err = $@ || 'Unknown error';
};
alarm( 0 );
die $err
if $err;
$timed_out = 0;
}
sub do_work {
my $var = 0;
for (1 .. 1000000) {
for (1 .. 1000000) {
$var++;
}
}
}
####
Exiting subroutine via last at fluff.pl line 38.
Exiting subroutine via last at fluff.pl line 38.
Exiting eval via last at fluff.pl line 38.
Label not found for "last TIMEOUT_BLOCK_WITH_UNIQUE_LABEL" at fluff.pl line 38.
####
use strict;
use warnings;
local $SIG{ALRM} = sub {
goto LABEL1;
};
alarm 1;
my $var = 0;
for (1 .. 1000000) {
for (1 .. 1000000) {
$var++;
}
}
print "Here\n";
LABEL1: 1;
print "There\n";
####
use strict;
use warnings;
sub go {
goto LABEL1;
}
go();
print "Here\n";
LABEL1: 1;
print "There\n";