Damian Conway writes: > > Not equivalent at all. C<$foo~>bar> means "append $foo to the argument list > of subroutine C<bar>". C<foo.bar> means "make C<$foo> the invocant for method > <bar>". > > Curiously enough, the confusions I'm hearing over this issue are, to me, the > strongest argument yet for using Andy's |> and <| symbols instead. > > Damian >
Proposal :( but may be this is just part of the above mentioned confusion:) * we probably should distinguish between + pseudo-pipes ( I spell them as :> and <: ) + and right- and left- assignment operators ( I spell them ... => $var and $var <= ... ) . these should be aware of distinction between assignment and binding -- so probably there have to be 2 forms of each ??? * :> and <: should be thought of ( and probably actually are ) just ( special ) __commas__ in the following sense : @a :> sort { ... } #==> sort { ... } @a: @a :> join "..." #==> join "..." @a: sort { ... } <: @a #==> sort { ... } @a: join "..." <: @a #==> join "..." @a: so it seems that ( already discussed ) redunduncy of <: can be solved by saying that * <: is doing to the _following_ term _the_same_thing_ ( makes it an adverb ) as what ":" is doing to the _preceding_ term --- so <: is sort of "prefix" form special comma : . that means that <: is "prefix" adverbial comma - and the verb is to be found _before_ the <: comma . * :> is different . it makes the _preceding_ term an adverb --- but the corresponding verb have to be searched _after_ the :> comma . it seems that all the distinction between methods and subroutines is now handled if methods and subroutines know how to handle adverbial arguments. ( but this does not allow to place _usual_ arguments before the subroutine/method -- so probably there have to be another comma ) It seams that with this in mind and usual precedence rules we can make multimethods enjoy the l2r notations. ( $square :> init ) :> ( $circle :> init ) :> do_something do_something <: ($square :> init) <: ($circle :> init) arcadi