:) happens in v5.16.1 also, but if you search Try::Tiny for $_ this caveat is described but real solution is not
I found this thread I participated in Lexical $_ in given/when vs. BLOCK arguments which had the real solution, because I ran into similar nonsense before :)
#!/usr/bin/perl --
use feature qw (switch);
use Try::Tiny;
my $uv;
given (17) {
when (3) { print "three\n"; };
when (17) {
#~ local $_; # grr Can't localize lexical variable $_
#~ my $_; ## doesn't help, Try::Tiny code is using global $_
#~ local *_; ## doesn't help , here $_ refers to lexical $_
our $_; # THIS HELPS
try {
print "In try block\n";
die( "Substitute undefined variable $uv\n");
print "Still in try block\n";
} catch {
print "We caught global \$@ = $@\n";
print "We caught lexical \$_ = $_\n";
print "We caught global \$::_ = $::_\n";
print "We caught global \$_[0] = $_[0]\n";
};
}
}
__END__
In try block
We caught global $@ =
We caught lexical $_ = Substitute undefined variable
We caught global $::_ = Substitute undefined variable
We caught global $_[0] = Substitute undefined variable
So summary, local $_ should NOT die but work just like our $_ inside given/when
Try::Tiny documentation should lead with $::_
I still don't think in terms of given/when -- well I do, but I spell it if/else/unless :D |