Re: What are values with : called?
[email protected] (Bruce Gray) Sun, 2 Nov 2025 21:13:17 -0600
| Newsgroups | perl.perl6.users |
|---|---|
| Message-ID | <[email protected]> |
> 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)