Can't answer most of your points. How to replicate this behavior in Raku without handling all the > args-handling and opening/closing logic yourself is now… unclear, at best, > and may simply be missing. >
https://marketing.perl6.org/id/1541379592/pdf_digital has a hint " - see IO::CatHandle type if you need old behaviour ( Isn't "CatHandle" just a long way of writing "tail" ? :-o ) https://docs.perl6.org/type/IO::CatHandle - Its constructor accepts a list of strings as filenames ... because IO::Handle is responsible for converting strings (Cool) to handles, it still needs work to treat '-' as *IN but that's do-able my $unixy-in = IO::CatHandle.new(@*ARGS.map: { $_ eq '-' ?? $*IN !! $_ } ) -y On Mon, Nov 5, 2018 at 3:37 PM Trey Harris <t...@lopsa.org> wrote: > On Mon, Nov 5, 2018 at 11:54 AM Ralph Mellor > [ralphdjmel...@gmail.com](mailto:ralphdjmel...@gmail.com) > <http://mailto:%5bralphdjmel...@gmail.com%5D(mailto:ralphdjmel...@gmail.com)> > wrote: > > On Sun, Oct 28, 2018 at 7:26 PM Xiao Yafeng <xyf.x...@gmail.com> wrote: >> >>> Besides, just curious, why choose '_' as default it looks strange.... >>> >> >> Turns out it's deprecated in 6.d: >> >> https://marketing.perl6.org/id/1541379592/pdf_digital >> > Is it, for Proc objects, in addition to for &open as mentioned in the > ChangeLog <https://github.com/perl6/6.d-prep/blob/master/ChangeLog.md>? > > They mean different things (that simply happen to semantically overlap > frequently): > > - In &open <https://docs.perl6.org/routine/open>, use of '-' indicates > $*IN or $*OUT for read-only or write-only uses respectively. > - In Proc <https://docs.perl6.org/type/Proc>, the default of '-' > indicates standard POSIX-like practice of inheriting stdin, stdout and > stderr from the parent, no matter how the parent (or its parent(s)) have > duped or redirected them. > > From the respective code, I think it is not; as the ChangeLog states, it’s > deprecated for &open, but not for Proc. > > This passage > <https://docs.perl6.org/language/variables#Argument_related_variables> > from the built-in variables doc is interesting: > > Argument related variables > > - $*ARGFILES An IO::ArgFiles <https://docs.perl6.org/type/IO::ArgFiles> > (an empty subclass of IO::CatHandle) that uses @*ARGS as source files, > if it contains any files, or $*IN otherwise. When $*IN is used, its > :nl-in, :chomp, :encoding, and :bin will be set on the IO::ArgFiles > <https://docs.perl6.org/type/IO::ArgFiles> object. > > As of 6.d language, $*ARGFILES *inside* sub MAIN > <https://docs.perl6.org/language/functions#sub_MAIN> is always set to $*IN, > even when @*ARGS is not empty. > > - @*ARGS Arguments from the command line. > > This is getting at the issue with replicating the common “while diamond” > operation (originally just while (<>)) in Perl 5, which allowed easy > replication of Unix/POSIX default line-oriented file-handling behavior: > namely, concatenating the lines of each filename given in the optional > positionals, unless the filename was the single hyphen "-", in which case > lines from standard input were read instead; when the positionals were > empty, an implicit "-" was assumed. > > (If you haven’t played with this behavior directly, it’s very easy to just > use cat or grep to observe this behavior; with no files, stdin is used; > with files, stdin is usually not used, but - alone can be used to switch > to stdin after reading named files. And not just “after”—it’s permissible, > although a bit unusual, to put - between file names, in which case lines > from the named files preceding the hyphen are processed, then lines from > stdin are processed until stdin closes, then files named after the hyphen > are processed. It’s even allowable to include the single hyphen more than > once, which forces reopening of stdin for another round of input until it’s > closed again. This behavior is ubiquitous in the Unix world; Perl 5 had it > built-in, Python has its fileinput module > <https://docs.python.org/3/library/fileinput.html>, and so on.) > > How to replicate this behavior in Raku without handling all the > args-handling and opening/closing logic yourself is now… unclear, at best, > and may simply be missing. > > In this passage <https://docs.perl6.org/language/5to6-nutshell#Loops> > from the Perl 5-to-6 guide (which, as an ancillary help document, does not > have any authority for language specification), we read: > > Note that reading line-by-line from a filehandle has changed. > > In Perl 5, it was done in a while loop using the diamond operator. Using > for instead of while was a common bug, because the for causes the whole > file to be sucked in at once, swamping the program’s memory usage. > > In Perl 6, for statement is *lazy*, so we read line-by-line in a for loop > using the .lines method. > > while (<IN_FH>) { } # Perl 5 > > for $IN_FH.lines { } # Perl 6 > > $IN_FH is, I think, given in the latter example in a hand-wavy way. The > thing that comes *closest* to cat, grep, Perl 5’s diamond, or Python’s > fileinput is—I believe—the unadorned routine lines() > <https://docs.perl6.org/routine/lines>: > > for lines() -> $line { ... } > > but it has the nonstandard behavior (which may be a bug) of only observing > the first hyphen found in the argument list and ignoring any successive > ones (at least in 6.c). Also, while I’m having trouble getting a 6.d to > work for me right now, I think Raku will give a deprecation notice when it > encounters that first hyphen—so to get the same behavior you’ll again need > to handle all hyphens on the command line yourself. > > Just fyi — It’s entirely possible I’m wrong here, and just haven’t found > the right bit of the docs, or that once I get 6.d built I’ll find that > $*ARGFILES.lines — which would *seem* to me to be the right thing to use > — works for this purpose. > > I’m not clear why its behavior is changed in sub MAIN—obviously, you can > handle the positionals yourself in the MAIN signature, but you lose the > special stdin handling. > > Trey >