Hi Richard, I'm trying to figure out when the parentheses in 'lines()'
can be dropped, and 'lines' used instead. Any pointers? I have about
nine or so working examples below, but formulating a clear
rule-of-thumb is proving elusive. Any help appreciated, --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

mbook:~ homedir$ perl6 -e '.say for lines()' six_fruits1.txt
apple:banana:carrot:dragonfruit:eggplant:favabean
apricot:basil:cabbage:dill:escarole:fennel
acai:beets:celery:daikon:endive:figs

mbook:~ homedir$ perl6 -e '.say for lines' six_fruits1.txt
apple:banana:carrot:dragonfruit:eggplant:favabean
apricot:basil:cabbage:dill:escarole:fennel
acai:beets:celery:daikon:endive:figs

mbook:~ homedir$ perl6 -e '.say for lines("a\nb\n")' six_fruits1.txt
a
b

mbook:~ homedir$ perl6 -e '.say for lines[0]' six_fruits1.txt
apple:banana:carrot:dragonfruit:eggplant:favabean

mbook:~ homedir$ perl6 -e '.say for lines[0..1]' six_fruits1.txt
apple:banana:carrot:dragonfruit:eggplant:favabean
apricot:basil:cabbage:dill:escarole:fennel

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() {.split(":")[0, 2, 1,
5].join("\t").say};' six_fruits1.txt
apple carrot banana favabean
apricot cabbage basil fennel
acai celery beets figs

mbook:~ homedir$ perl6 -e 'for "six_fruits1.txt".IO.lines()
{.split(/\:/)[0, 2, 1, 5].join("\t").say};'
apple carrot banana favabean
apricot cabbage basil fennel
acai celery beets figs

mbook:~ homedir$ perl6 -e 'for "six_fruits1.txt".IO.lines
{.split(/\:/)[0, 2, 1, 5].join("\t").say};'
apple carrot banana favabean
apricot cabbage basil fennel
acai celery beets figs




On Mon, Jul 29, 2019 at 1:07 AM 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