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

Reply via email to