class X::Proc::Async::OpenForWriting is Exception {}

When a Proc::Async object is opened only for reading from the external program (no :w passed to open), and a write operation such as write, print and say is performed, an exception of type X::Proc::Async::OpenForWriting is thrown:

my $proc ="echo");
CATCH { default { put .^name''.Str } };
# OUTPUT: «X::Proc::Async::OpenForWriting: Process must be opened for writing with :w to call 'say'␤»

To fix that you can use writable commands with :w flag:

my $prog ='cat');
$prog.stdout.tap-> $str {
    print $str;
my $promise = $prog.start;
await $prog.say('foo');
await $promise;


method method§

method method(X::Proc::Async::OpenForWriting:D:)

Returns the method name that was called and which caused the exception.