On Wed, 31 Jul 2019 14:28:11 -0700
William Michels via perl6-users <perl6-us...@perl.org> wrote:

> Hi Patrick, I used both your examples as perl6 one-liners. I'm not
> sure why, but I had to change .split(':') either to .split(":") or
> .split(/\:/) for both example to work. Maybe it's a command-line
> thing? Possibly because I'm on a Mac?

See
https://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash
. This behaviour affects all https://en.wikipedia.org/wiki/Bourne_shell
derivatives on Mac, Linux, BSDs, and all other systems.

> Also, to get the second example
> to work I change the 'for lines' preamble to 'for lines()' then it's
> fine (otherwise perl6 balks with an awesome error: "Function 'lines'
> needs parens to avoid gobbling block").
> 
> Thanks again for all your help! --Best, Bill.
> 
> # test file: six_fruits1.txt
> mbook:~ homedir$ cat six_fruits1.txt
> apple:banana:carrot:dragonfruit:eggplant:favabean
> apricot:basil:cabbage:dill:escarole:fennel
> acai:beets:celery:daikon:endive:figs
> 
> # First example:
> mbook:~ homedir$ perl6 -e 'say .split(":")[0, 2, 1, 5].join("\t") for
> lines' six_fruits1.txt
> apple carrot banana favabean
> apricot cabbage basil fennel
> acai celery beets figs
> mbook:~ homedir$ perl6 -e 'say .split(/\:/)[0, 2, 1, 5].join("\t") for
> lines' six_fruits1.txt
> apple carrot banana favabean
> apricot cabbage basil fennel
> acai celery beets figs
> 
> # Second example: note changed 'for lines' to 'for lines()'
> mbook:~ homedir$ perl6 -e ' for lines() { say .split(":")[0, 2, 1,
> 5].join("\t") }' six_fruits1.txt
> apple carrot banana favabean
> apricot cabbage basil fennel
> acai celery beets figs
> mbook:~ homedir$ perl6 -e ' for lines() { say .split(/\:/)[0, 2, 1,
> 5].join("\t") }' six_fruits1.txt
> apple carrot banana favabean
> apricot cabbage basil fennel
> acai celery beets figs
> 
> 
> On Mon, Jul 29, 2019 at 12:56 PM Patrick R. Michaud <pmich...@pobox.com>
> wrote:
> >
> > 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)
> > > > > >
> > > > > >  



-- 
-----------------------------------------------------------------
Shlomi Fish       http://www.shlomifish.org/
List of Graphics Apps - http://shlom.in/graphics

The most exciting phrase to hear in science, the one that heralds new
discoveries, is not “Eureka!” (I found it!) but “That's funny…”.
— https://en.wikiquote.org/wiki/Isaac_Asimov [Attributed]

Please reply to list if it's a mailing list post - http://shlom.in/reply .

Reply via email to