Switch-Back
view release on metacpan or search on metacpan
lib/Switch/Back.pm view on Meta::CPAN
$PPR::X::GRAMMAR
}xms;
# Replace each postfix "when"...
for my $pos (@target_pos) {
# Unique ID for the "when" (needed by continue())...
state $ID; $ID++;
# Convert postfix "when" to a postfix "if" (preserving Afterwhen info for continue())...
substr($BLOCK, $pos->{from}, $pos->{len})
= "BEGIN { \$^H{'Switch::Back/Afterwhenprev'} = \$^H{'Switch::Back/Afterwhen'};"
. " \$^H{'Switch::Back/Afterwhen'} = 'Afterpostfixwhen$ID'; }"
. "$pos->{expr}, break if " . _apply_when_magic($pos->{mod})
. ";Afterpostfixwhen$ID:"
. "BEGIN { \$^H{'Switch::Back/Afterwhen'} = \$^H{'Switch::Back/Afterwhenprev'}; }"
. $pos->{end};
}
return $BLOCK;
}
# Change the target expression of a "when" to implement all the magic behaviours...
sub _apply_when_magic ($EXPR) {
# Reduce the expression to what the compiler would see...
$EXPR = _simplify_expr($EXPR);
( run in 0.622 second using v1.01-cache-2.11-cpan-49f99fa48dc )