.WHAT gives you the actual type, whereas .^name gives you a string that is the name.
In Perl6 types are things you can pass around; which is good because you can have more than one with the same name. sub bar (){ my class Foo { } } sub baz (){ my class Foo { } } my $a = bar().new(); bar() === $a.^name; # False (one is a Foo type object, the other a string) bar() === $a.WHAT; # True (both are the Foo type object) bar().^name === baz().^name; # True (but they are different types) bar().WHAT === baz().WHAT; # False (both are type objects, but they are different types) "".WHAT =:= Str; # True (both are the Str type object) Basically think about .WHAT as being the Perl6 equivalent of `typeof()`. On Mon, Oct 29, 2018 at 12:12 PM Joseph Brenner <doom...@gmail.com> wrote: > > Brandon Allbery <allber...@gmail.com> wrote: > > 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 > > Thanks. I didn't get that the behavior of WHAT and ^name were that different. > > > > > On Mon, Oct 29, 2018 at 1:04 PM Joseph Brenner <doom...@gmail.com> 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 > > allber...@gmail.com > >