I need to pipe the result of "cat variousFiles" to a perl6 program while requiring the program to take different command line arguments. Perl6 seems to want to take the first argument as a file to be read. I can re-write my routines, but I want to use a pipe from shell. Is there a way to do it?
Here is my program named testStdInArgs.pl:
say @*ARGS;
for lines() {
say "reading ==> ", $_;
}
I want to do (foo and bar are arguments):
cat logFile | perl6 testStdInArgs.pl foo bar
Here are the errors:
[foo bar]
Earlier failure:
(HANDLED) Unable to open file 'foo'
in block <unit> at stdInArgs.pl line 2
Final error:
Type check failed in binding to $iter; expected Iterator but got Failure (Failure.new(exception...)
in block <unit> at stdInArgs.pl line 2
Thank you very much
The lines
function is a shortcut for $*ARGFILES.lines
.$*ARGFILES
is a magic file handle that represents a concatenation of the files specified as command-line arguments (@*ARGS
), and falls back to stdin only if @*ARGS
is empty.
If you always want to read from stdin, use $*IN.lines
:
for $*IN.lines {
say "reading ==> $_";
}
Alternatively, let your code modify @*ARGS
to remove any command-line arguments that you don't want to be interpreted as filenames, and then use lines()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With