> On Nov 2, 2025, at 20:31, ToddAndMargo via perl6-users <[email protected]>
> wrote:
>
> On 11/2/25 4:55 PM, Joseph Brenner wrote:
>> my $proc = run 'echo', 'Raku is Great!', :out, :err;
>> $proc.out.slurp(:close).say; # OUTPUT: «Raku is Great!»
>> $proc.err.slurp(:close).say; # OUTPUT: «»
>
> Hi Joseph,
>
> The default of both :out and :err is "-",
> which is STDOUT and STDERR. This is
> similar to curl's "--output -" which send
> to the STDOUT.
>
> What I find puzzling is where else would they
> be going?
They (STDOUT and STDERR) would be going to the standard filehandles of the
*parent* process, just like if you run a command inside a Bash script.
The parent in this case is Raku itself, so they would go to your screen, or
wherever you have redirect all the Raku STDOUT and/or STDERR to.
% raku -e '
say "raku talks to STDOUT";
run(|<ls -d .>);
note "raku talks to STDERR";
run(|<ls fake>);
' > a.txt 2>b.txt
% cat a.txt
raku talks to STDOUT
.
% cat b.txt
raku talks to STDERR
ls: fake: No such file or directory
The spawned command 'ls' exited unsuccessfully (exit code: 1, signal: 0)
in block <unit> at -e line 5
> Can I modify :out to :out("eraseme.txt") and
> have the output go to a file (eraseme.txt)
> instead of STDOUT? That would be kind of cool.
>
> Yours in puzzlement,
> -T
`:out` can take a argument, but it needs a filehandle, not a filename.
It you want to open it in-line, it must be a *writable* filehandle, so this
will not work:
:out("eraseme.txt".IO)
Instead, use this:
:out("eraseme.txt".IO.open(:w))
or, open the filehandle separately, potentially to use it across several `run`
commands, then close it manually.
--
Hope this helps,
Bruce Gray (Util of PerlMonks)