Yuval Kogman wrote:

Rob Kinyon had a strong argument (in #perl6) that anything that
depends on load order is bound to make someone's head hurt.

He has a point.

Especially if one in working in something like mod_perl, and the order various modules were actually loaded in can vary greatly from the order they are listed in the source code.

Unless we have every lexical scope keep track of what order *it* thinks all the MMD methods *should* have been loaded in, which overall feels very painful.

I thought I've had is whether there should be a "subname" that can be defined on a given multi, to identify it as distinct from the others, and not having to type the full signature. Something analougous to HTTP/HTML # suffixes. One could then use that subname in conjuction with the short name to refer to a specific method. This could then let a user easily skip MMD when DWIMmery fails. To be useful, it would need to be simple syntax. I'll propose forcing "# as comment" to be "\s+# as comment" (if it isn't already), and have subnames specified as shortname#subname.

   multi method foo#bar (Num x) {...}
   multi method foo#fiz (String x) {...}

   $y = 42;
   $obj.foo#fiz($y); # even though $y looks like a Num
   $obj.foo($z);     # let MMD sort it out.

It's unclear if


even works, or should work, even if it does.

It be no means solves all of Yuval's problems, but it would be a handy workaround to un-multi your calls.

-- Rod Adams

Reply via email to