My guesses at Perl 6 versions of the Perl 5 example: say .split(':')[0, 2, 1, 5].join("\t") for lines;
-or- for lines { say .split(':')[0, 2, 1, 5].join("\t") } Pm On Mon, Jul 29, 2019 at 12:49:51PM -0700, William Michels via perl6-users wrote: > Hello, Just a short backgrounder to say that this question arose this > past weekend at a Perl6 Meetup (Oakland, CA). Specifically we were > looking at how to write a Perl6 version of some introductory Perl5 > code in "Learning Perl", 7th Edition by Tom Phoenix, brian d foy, > Randal L. Schwartz: > > #Perl 5 code below: > while (<>) { > chomp; > print join("\t", (split /:/)[0, 2, 1, 5] ), "\n"; > } > > https://www.oreilly.com/library/view/learning-perl-7th/9781491954317/ch01.html > > (Thanks to Joseph Brenner for organizing the Perl6 Meetup). > > > > > > > On Mon, Jul 29, 2019 at 2:09 AM Elizabeth Mattijsen <l...@dijkmat.nl> wrote: > > > > Also, you can make this conditional: show me all the comment lines of a > > source file: > > > > > > $ perl6 -e '.say if .starts-with('#') for lines' source-file > > > > > > > On 29 Jul 2019, at 10:06, Richard Hainsworth <rnhainswo...@gmail.com> > > > wrote: > > > > > > Also no need for all the brackets > > > > > > .say for lines; > > > > > > This is quite idiomatic Perl 6 and not golfing > > > > > > On Mon, 29 Jul 2019, 07:13 Joseph Brenner, <doom...@gmail.com> wrote: > > > > Hmmm. I would expect that to be in the Perl 5 to Perl 6 Migration > > > > Guides, but I do not see it there. > > > > > > Exactly, I was just looking there, and I ended up playing around with > > > the method form of lines, and didn't think to try the function > > > form of it. > > > > > > To summarize, if the goal is to write a "simple_echo" script that > > > can work with a file name or with lines on standard input: > > > > > > simple_echo lines.txt > > > cat lines.txt | simple_echo > > > > > > The perl5 version would probably be: > > > > > > #!/usr/bin/env perl > > > while(<>){ > > > print; > > > } > > > > > > The perl6 version would be something like: > > > > > > #!/usr/bin/env perl6 > > > use v6; > > > for lines() { > > > say $_; > > > } > > > > > > > > > The kind of thing I was playing with was: > > > > > > #!/usr/bin/env perl6 > > > use v6; > > > my @lines = $*ARGFILES.IO.lines; > > > say @lines; > > > > > > That works for lines from a file, but not from standard input, and the > > > error message isn't tremendously helpful: > > > > > > No such method 'lines' for invocant of type 'IO::Special' > > > > > > > > > > > > > > > On 7/28/19, Bruce Gray <robertbrucegr...@gmail.com> wrote: > > > > > > > > > > > >> On Jul 28, 2019, at 6:20 PM, Joseph Brenner <doom...@gmail.com> wrote: > > > >> > > > >> I was just wondering if there's some direct analog in perl6 to the > > > >> perl5 construct: > > > >> > > > >> while(<>){ ... } > > > >> > > > >> If I'm planning on passing a filename on the command-line, I can just > > > >> get it out of $*ARGFILES easily enough, but what if I also wanted it > > > >> to work on lines passed in via standard input? > > > > > > > > > > > > `lines` , as a sub instead of a method, and no arguments. > > > > > > > > See: https://docs.perl6.org/routine/lines#(Cool)_routine_lines > > > > Without any arguments, sub lines operates on $*ARGFILES, which > > > > defaults to > > > > $*IN in the absence of any filenames. > > > > > > > > For example: > > > > perl6 -e 'say .join("\t") for lines().rotor(4);' path/to/file.txt > > > > > > > > Hmmm. I would expect that to be in the Perl 5 to Perl 6 Migration > > > > Guides, > > > > but I do not see it there. > > > > > > > > — > > > > Hope this helps, > > > > Bruce Gray (Util of PerlMonks) > > > > > > > >