On Mon, 19 Dec 2016 11:39:54 -0800, elizabeth wrote:
> Fixed with 3fe5893 , tests needed.
> 
> > On 16 Dec 2016, at 22:14, Elizabeth Mattijsen (via RT) <perl6-bugs-
> > follo...@perl.org> wrote:
> >
> > # New Ticket Created by  Elizabeth Mattijsen
> > # Please include the string:  [perl #130363]
> > # in the subject line of all future correspondence about this issue.
> > # <URL: https://rt.perl.org/Ticket/Display.html?id=130363 >
> >
> >
> > $ 6 'm/./; dd $/'
> > No such method 'match' for invocant of type ‘Any'
> >
> > $ 6 '/./; dd $/'
> > Nil $/ = Nil
> >
> >
> > Apparently the codegen of m/./ introduces a call to .match, whereas
> > /./ codegens to something that does *not* call .match.  I can only
> > assume that’ because it assumes there can be named parameters (even
> > though we could see that that is not the case).
> >
> > So fixing the codegen in this case would not solve this problem:
> >
> > $ 6 'm:2nd/./; dd $/'
> > No such method 'match' for invocant of type ‘Any'
> >
> >
> > The only way I see we could fix this, is by adding an Any.match or a
> > Mu.match, that would just set $/ to Nil.

I'm 10 months late to the party, but this looks off to me.

The commit adds a `.match` method that does nothing to virtually every object.
The listed reasoning is that `m/./` codegens differently than `/./` but
that's still the case: `/./` constructs a Regex object (and in non-Bool context
no match against $_ is done), while `m/./` performs a match with $_, so it
wasn't surprising that `m/./` would complain about "no .match on Any",
while `/./` didn't.

Seems the new behaviour simply hides a bug in user's code, so I'm hesitant
to add it as a requirement to the language spec.

Reply via email to