Hello Liz,

On Sun, Sep 07, 2025 at 11:02:10AM +0200, Elizabeth Mattijsen wrote:
> > my $content = "example.txt".IO.slurp;       # Read file
> > $content ~~ s/Hello/Hi/;                    # Modify content
> > spurt $filename, $content;                  # Write back to file

> FWIW, I don't know why that example isn't doing
> $filename.IO.spurt($content)

this is a really interesting question because I have to admit I prefer
the one of the exemple but I don't know how biased is my explaination.

I would say I found it a little less noisy and harder to edit but the
difference is so thin to me I don't mind.

but I would like to write

        spurt $content, $filename

with multimethod

        spurt $filename # which would be spurt $_, $filename

> $filename.IO.spurt( "example.txt".IO.slurp.subst("Hello","Hi") )

> > but it we were able to write this:
> > 
> > with "example.txt".IO.slurp {
> > s/Hello/Hi/;
> > .&spurt: $filename;
> > }
> >
> I really dislike indirect object syntax used this way.

I love it because it's a way to declare a method without monkey-patching

> What does this bring?  Why not just $filename.spurt($_) ?

Again: I feel it's less noisy

        .&spurt: $filename;
        $_.spurt($filename);

I can't explain the core of it and as I say: I probably use both without
noticing.

> > with "example.txt".IO.slurp {
> > s/Hello/Hi/;
> > .spurt: $filename;
> > }
> 
> Now *that* I find to be an interesting idea.  The oneliner would then become:
> 
>   "example.txt".IO.slurp.subst("Hello","Hi").spurt($filename)
> 
> which has a nice left-to-right feel.

Which would be indeed my syntax of choice.

amicalement,

-- 
Marc Chantreux

Attachment: signature.asc
Description: PGP signature

Reply via email to