> 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)

Reply via email to