In:
perl6 -ne 'put .chop' demo1.txt

the script prints out the value returned by the chop method, because put
acts on this value.

In:
perl6 -pe '.chop' demo1.txt
the value returned by chop is discarded and the script print $_ unaltered.

Cheers,
Laurent.

Le mar. 5 mai 2020 à 21:07, William Michels via perl6-users <
perl6-us...@perl.org> a écrit :

> On Tue, May 5, 2020 at 8:01 AM Gianni Ceccarelli <dak...@thenautilus.net>
> wrote:
> >
> > On 2020-05-05 William Michels via perl6-users <perl6-us...@perl.org>
> > wrote:
> > > mbook:~ homedir$ perl6 -ne 'put .chop' demo1.txt
> > > this is a test
> > > I love Unix
> > > I like Linux too
> > > mbook:~ homedir$ perl6 -pe '.chop' demo1.txt
> > > this is a test,
> > > I love Unix,
> > > I like Linux too,
> >
> > The ``.chop`` method does not mutate its argument, it only returns a
> > chopped value. If you want to mutate, you need to say so::
> >
> >   raku -pe '.=chop' demo1.txt
> >
> > Notice that the ``.=`` operator is:
> >
> > * not specific to ``chop``
> > * not even specific to calling methods
> >
> > In the same way that ``$a += 1`` is the same as ``$a = $a + 1``, so
> > ``$a .= chop`` is the same as ``$a = $a.chop``.
> >
> > So, if you wanted, you could do::
> >
> >   raku -pe '.=uc' # print upper-case
> >
> > --
>
> I appreciate the reply, but your answer fails to explain one thing:
> why does chop work without ".=" assignment using the "-ne" one-liner
> flag, but not with the "-ne" one-liner flag"? According to the help
> screen (running 'perl6 -help' at the bash command prompt), this is
> what it says about the "-n" and the "-e" flags:
>
> -n                   run program once for each line of input
> -p                   same as -n, but also print $_ at the end of lines
>
> So what strikes me from the definitions above is the part where "-p"
> is the "same as -n... (with autoprinting of $_)." That leads people to
> believe that they can write a short one-liner with the -ne flag ('put
> .chop') and an even shorter one-liner with the -pe flag ('.chop').
>
> If the only difference between the "-n" and "-p" flags is really that
> the second one autoprints $_, I would have expected the "-pe" code
> above to work identically to the "-ne" case (except "-ne" requires a
> print, put or say). Presumably  'perl6 -ne "put .chop" '  is the same
> as  'perl6 -ne ".chop.put" ' , so if  ".put"  isn't returning $_ ,
> what is it returning then?
>
> Look, It's no big deal if I have to write 'perl6 -pe ".=chop" '
> instead of  'perl6 -pe ".chop" ', I just want to resolve in my mind a
> perceived inconsistency wherein there's no requirement to write
> 'perl6 -ne "put .=chop" ' for the "-ne" case, but there IS a
> requirement to write 'perl6 -pe ".=chop" ' for the "-pe" case.
>
> Best Regards, Bill.
>

Reply via email to