Two issues:
(1) all standard exceptions are in or under the X:: namespace.
(2) .WHAT doesn't show names with their namespaces, whereas .^name does.
pyanfar Z$ 6 'my $r = 4/0; say $r; CATCH {default {say .^name}}'
X::Numeric::DivideByZero
On Mon, Oct 29, 2018 at 1:04 PM Joseph Brenner <[email protected]> wrote:
> I was just looking into doing some finer-grained exception handling,
> so I tried this:
>
> use v6;
> try {
> my $result = 4/0;
> say "result: $result";
> CATCH {
> # when DivideByZero { say "Oh, you know."; }
> default { say .WHAT; .Str.say } # (DivideByZero) Attempt
> to divide 4 by zero using div
> }
> }
>
> The first time through, The .WHAT tells me I've got
> "DivideByZero", and so I added the line that's commented out
> here, at which point I got the error:
>
> ===SORRY!===
> Function 'DivideByZero' needs parens to avoid gobbling block (or
> perhaps it's a class that's not declared or available in this scope?)
>
> Putting parens around (DivideByZero) doesn't help:
>
> Undeclared name:
> DivideByZero used at line 12
>
> My impression was this would just work from looking
> at the examples using things like X::AdHoc here:
>
> https://docs.perl6.org/language/exceptions
>
--
brandon s allbery kf8nh
[email protected]