> Could the "-e" flag be limiting variable initializations to one?
I don't think so. I recall the -n being shorthand for wrapping your -e program in while ( <> ) { # your program here } (-p just adds a continue "print" block, I believe), as folks would do cool tricks of writing their -e script to have an early close while curly, instead of, say, using END blocks $ seq 10 | perl -nE ' $y += $_} ; { say $y; ' 55 Note: using "my" $ seq 10 | perl -nE ' my $y += $_} ; { say $y; ' [crickets] gets you nothing, as $y is scoped to the -n while loop ;-> ________________________________ From: William Michels <w...@caa.columbia.edu> Sent: Thursday, September 26, 2019 3:01 PM To: yary <not....@gmail.com> Cc: perl6 <perl6-users@perl.org>; Andy Bach <andy_b...@wiwb.uscourts.gov>; Joseph Brenner <doom...@gmail.com>; Elizabeth Mattijsen <l...@dijkmat.nl>; Marc Chantreux <e...@phear.org>; Vittore Scolari <vittore.scol...@gmail.com> Subject: Re: anything faster than say [+] lines? Hi Yary, Honestly, I just tried re-writing the fastest StackOverflow answer (written in Perl 5) that I found below, in Perl 6. To write P5 as P6 I had to declare the variable $x with 'my'. Then I played around with a declaration restricting to "Int" type (to look at potential performance hits), just because well--with Perl 6--I could. >#Perl 5 code: >seq 1000000 | perl -lne '$x += $_; END { print $x; }' https://stackoverflow.com/a/47162173 I'm guessing the answer as to 'why "my Int $y" isn't re-initialized every time' in P6 is similar to the reason in P5? Could the "-e" flag be limiting variable initializations to one? Best Regards, Bill. On Thu, Sep 26, 2019 at 12:00 PM yary <not....@gmail.com> wrote: > > I see that Int/Num error, and also would like an explanation as to why "my > Int $y" isn't re-initialized to Any each time through this loop > > $ seq 1000000 | perl6 -ne 'my Int $y += $_; END { print $y; }' > > Type check failed in assignment to $y; expected Int but got Num > (500000500000e0) > > in block <unit> at -e line 1 > > > $ perl6 --version > > This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03 > > implementing Perl 6.d. > > > -y > > > On Thu, Sep 26, 2019 at 2:24 PM William Michels via perl6-users > <perl6-users@perl.org> wrote: >> >> Thank you, Andy and Joseph! >> >> >> On Thu, Sep 26, 2019 at 8:47 AM Andy Bach <andy_b...@wiwb.uscourts.gov> >> wrote: >> > >> > > Still, it's just "works for me": >> > >> > seq 1000000 | time perl6 -ne 'my $y += $_; END { print $y; }' >> > >> > I think that's still the wrong one - your missing the "Int" >> > $ seq 1000000 | perl6 -ne 'my Int $y += $_; END { print $y; }' >> > 500000500000 >> > >> > though that works here, admittedly, my p6 is sort old >> > This is Rakudo version 2018.03 built on MoarVM version 2018.03 >> > implementing Perl 6.c. >> > >> > I'm a little puzzled, I'd've thought the loop around the 'my Int $y' would >> > redeclare a local $y each time. Instead it behaves like: >> > $ time perl6 -e 'my Int $y = 0;for ( 1 .. 1000000) { $y += $_} ; say $y; ' >> > >> > (which is signficantly faster ;-) >> > 500000500000 >> > real 0m1.229s >> > user 0m1.254s >> > sys 0m0.040s >> > >> > ) >> > ________________________________ >> > From: Joseph Brenner <doom...@gmail.com> >> > Sent: Wednesday, September 25, 2019 11:13 PM >> > To: William Michels <w...@caa.columbia.edu> >> > Cc: Marc Chantreux <e...@phear.org>; Vittore Scolari >> > <vittore.scol...@gmail.com>; Elizabeth Mattijsen <l...@dijkmat.nl>; perl6 >> > <perl6-users@perl.org> >> > Subject: Re: anything faster than say [+] lines? >> > >> > Oh, wait. I tried the wrong one-liner. Still, it's just "works for me": >> > >> > seq 1000000 | time perl6 -ne 'my $y += $_; END { print $y; }' >> > 50000050000029.29user 0.06system 0:28.41elapsed 103%CPU >> > (0avgtext+0avgdata 76196maxresident)k >> > 63328inputs+0outputs (32major+15588minor)pagefaults 0swaps >> > >> > >> > >> > On 9/25/19, Joseph Brenner <doom...@gmail.com> wrote: >> > > I just gave that one-liner a try, but I didn't see that error: >> > > >> > >> seq 1000000 | time perl6 -e 'say [+] lines' >> > > 500000500000 >> > > 28.70user 0.07system 0:28.29elapsed 101%CPU (0avgtext+0avgdata >> > > 74188maxresident)k >> > > 63424inputs+0outputs (32major+15409minor)pagefaults 0swaps >> > > >> > > >> > > perl6 --version >> > > This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03 >> > > implementing Perl 6.d. >> > > >> > > uname -a >> > > Linux fandango 4.9.0-8-686 #1 SMP Debian 4.9.144-3 (2019-02-02) i686 >> > > GNU/Linux >> > > >> > > >> > > >> > > On 9/24/19, William Michels via perl6-users <perl6-users@perl.org> wrote: >> > >> I'm seeing a strange error. I started trying out Marc's original code, >> > >> then tried to adapt some Perl5-type solutions from SO to see how they >> > >> performed when re-written as Perl6. One thing I wanted to explicitly >> > >> test was how restricting to an "Int" type affected performance. >> > >> >> > >> However, I found a surprising result: a sequence of one-million Ints >> > >> throws an error, but a sequence of 999,999 Ints does not: >> > >> >> > >>> mbook:~ homedir$ seq 1000000 | time perl6 -e 'say [+] lines' >> > >>> 500000500000 >> > >>> 4.81 real 4.86 user 0.20 sys >> > >>> mbook:~ homedir$ seq 1000000 | time perl6 -ne 'my $y += $_; END { print >> > >>> $y; }' >> > >>> 500000500000 4.88 real 5.06 user 0.19 sys >> > >>> mbook:~ homedir$ seq 1000000 | time perl6 -ne 'my Int $y += $_; END { >> > >>> print $y; }' >> > >>> Type check failed in assignment to $y; expected Int but got Num >> > >>> (500000500000e0) >> > >>> in block <unit> at -e line 1 >> > >>> 499999500000 4.77 real 4.97 user 0.19 sys >> > >>> mbook:~ homedir$ seq 999999 | time perl6 -ne 'my Int $y += $_; END { >> > >>> print >> > >>> $y; }' >> > >>> 499999500000 4.86 real 5.05 user 0.19 sys >> > >>> mbook:~ homedir$ perl6 -v >> > >>> This is Rakudo version 2019.07.1 built on MoarVM version 2019.07.1 >> > >>> implementing Perl 6.d. >> > >>> mbook:~ homedir$ >> > >> >> > >> Any comments or explanation appreciated, >> > >> >> > >> Best Regards, Bill. >> > >> >> > >> >> > >> >> > >> >> > >> On Tue, Sep 24, 2019 at 1:59 AM Marc Chantreux <e...@phear.org> wrote: >> > >>> >> > >>> hello, >> > >>> >> > >>> > > > > nice ... but when x is ~ 75440 (not always), there is a problem >> > >>> > > > What is x here? >> > >>> > > sorry. x is the arg of seq (number of lines). >> > >>> > That never happens on my laptop >> > >>> >> > >>> well.. so it's a problem with my station. nevermind :) >> > >>> >> > >>> thanks again for helping >> > >>> marc >> > >> >> > >