As you can see from the routine page for "payload":

    https://docs.perl6.org/routine/payload

it only exists on X::AdHoc, which if you follow the link "from X::AdHoc"
explains:

    X::AdHoc is the type into which objects are wrapped if they are
thrown as exceptions, but don't inherit from Exception.

In your case you have a proper exception, i.e. the X::TypeCheck::Assignment

In this case you'll probably want .message instead. .message on X::AdHoc
will call .Str on the payload and return that, which is basically the
same thing you wanted to do with the payload with
PrintRedErr("$Payload\n") anyway. On top of that, every Exception object
implements message.

Hope that helps!
  - Timo

On 28/02/2019 12:46, ToddAndMargo via perl6-users wrote:
> Hi All,
>
> https://docs.perl6.org/language/exceptions#Catching_exceptions
>
> I am trying to place .payload into a variable `my $Payload = .payload;`
>
>
> CATCH {
>    # Reference:
> https://docs.perl6.org/language/exceptions#Catching_exceptions
>    my $NotifyStr;
>    my $Payload = .payload;
>
>    default {
>       # $*ERR.say: .payload;
>       PrintRedErr( "$Payload\n" );
>       $NotifyStr = $Payload;
>       for .backtrace.reverse {
>          next if .file.starts-with('SETTING::');
>          next unless .subname;
>          # $*ERR.say: "  in block {.subname} at {.file} line {.line}";
>          PrintRedErr( "  in block {.subname} at {.file} line
> {.line}\n" );
>       }
>    }
>    RunNoShell( "notify-send -u critical -t 0 -i \"$AlarmJpg\" \"CATCH
> Trap \" \"$NotifyStr\"" );
> }
>
>
> But keep pulling the following error:
>
>      No such method 'payload' for invocant of type
>      'X::TypeCheck::Assignment' in block <unit>
>      at ./GetUpdates.pl6 line 60
>
> Line 60 is `my $Payload = .payload;`
>
> What am I doing wrong?
>
> Many thanks,
> -T

Reply via email to