I think the original (or the "latest original") reason for breaking .meth from 
meaning $_.meth is that $_ is transitory and there was no way back to the 
nameless invocant.  In the absense of having a way back, I and others 
strongly advocated breaking the link.   I think we hated to do it.

Now if we can introduce another way back so that we can always get to the 
invocant if we want to, then I'd say lets leave .meth always working on $_ .  
It does have beauty and simplicity.

So then, to get back to the invocant...  I can't say that I liked many of the 
proposals.  The one that seemed to have merit though was $^.  I'd propose the 
following.

  meth foo {
     $_.meth; # defaults to the invocant
     .meth; # operates on $_ which defaults to the invocant
     $^.meth;  # is the invocant
     $^1.meth; # is the first invocant
     $^2.meth; # is the second invocant

     for 1 .. 10 {
        $_.say; topic of for
        .say; # use $_
        $^.say; # stringifies invocant 1
        $^1.say; # stringifies invocant 1
        $^2.say # stringifies invocant 2
     }
  }

The rules then are simple.  .meth always operates on $_.  $_ is always the 
current topic.  $_ defaults to the invocant of the method.  $^1 refers to the 
first invocant.  $^ is an alias for $^1.  $^n refers to the nth invocant.

Nice and simple.  No conflict with existing naming conventions.

Paul

Reply via email to