in reply to syntactic sugar, hemlock, and other such fun

As I read it, the point isn't figuring out how to make it work, but rather how to alter your source syntax.

The problem with prototypes is that the implicit sub thing only works for the first argument. So if you wanted to write:

step { code_goes_here; } "stepname";
but I don't think that's nice. How about a few more "keywords" in your syntax?
step "stepname", sub { code_goes_here; }
You can use a function with a prototype to make sub into any other word you want. You can use overloading to change the comma to something else.

Interesting problem.

—John