Re: Rationale for $!
[email protected] (Felipe Gasper) Wed, 27 Jan 2016 09:15:46 -0500
| Newsgroups | perl.perl6.language |
|---|---|
| Message-ID | <[email protected]> |
On 27 Jan 2016 7:15 AM, Moritz Lenz wrote:
> On 01/27/2016 07:17 AM, Felipe Gasper wrote:
>> Hello,
>>
>> What is the purpose of having $! in Perl 6?
>>
>> The global variables in Perl 5 are a constant headache, prompting
>> us to need to local()ize variables like $@, $!, and $? to avoid
>> unforeseen consequences like RT #127386 and those documented in
>> Try::Tiny’s POD.
>>
>> Perl 6 seems to give us both the “right” and the “wrong” solution
>> to accessing exception variables: we get $_ within a CATCH block
>> (right), but we also get that global $!--which, to me, seems
>> pathologically wrong.
>
> But it's not global! None of $_, $/, $! are global.
I modified the example I posted before to test that:
---------------
use v6;
my $x = 10;
my $y = 0;
my $z = $x / $y;
my $exception;
{
{
say $z;
CATCH {
default {
$exception = $_;
}
}
}
}
if ($exception) {
say "There was an exception: $exception ($!)";
}
say "still running";
---------------
If you run this, $! is populated even when we’ve gone back a block level
from where the exception was thrown.
So, what *is* the scoping of $!?
-FG