Since it's all calls with subroutine references, you could implement this using loops and callbacks or closures.

I generally think it's a bad idea. Over-engineering.