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
<[email protected]> 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, <[email protected]> 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 <[email protected]> wrote:
>> >
>> >
>> >> On Jul 28, 2019, at 6:20 PM, Joseph Brenner <[email protected]> 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)
>> >
>> >