Xiao Yafeng wrote: > Off the top of one's head, since there is no particular difference between > an operator and a function, can I see a function as a operator: > > (1, 2, 3, 4) >>elems<<(2, 3, 4, 5) #(2, 2, 2, 2) > (1, 2, 3, 4) >>shift<<(2, 3, 4, 5) #(2, 3, 4, 5)
But remember that operators come with an associativity: $a / $b / $c == ($a / $b) / $c # left associative $a ** $b ** $c == $a ** ($b ** $c) # right associative When you make a function into an operator, you need a good syntax for defining the associativity of the new pseudo-operator. Also note that shift(1, 2) doesn't work, because it gets a list, not an array, and lists are immutable. > Moreover, can I see a subroutine as a operator: > > (1, 2, 3, 4) >>{$a>$b??$a!!$b}<<(2, 3, 4, 5) #(2, 3, 4, 5) Every operator is accessible as a function (or a macro) already, for example the operator in 2 + 3 is known as &infix:<+>. The ternary is a rather ugly case, I guess it's called &infix:<?? !!>($condition, $true, $false), and it's short-circuiting, so it must be a macro rather than normal function. Cheers, Moritz -- Moritz Lenz http://perlgeek.de/ | http://perl-6.de/ | http://sudokugarden.de/