In fact, I partially understand how it works, but not completely. As I told you on IRC, it's a two steps trick.
First, a hook is installed inside @INC. What this sub does is to check whether it's second argument is an arrayref, and derefence it, hence returning the contained list.
Second, do() is passed an arrayref with a filehandle and a coderef inside. As do() also uses @INC, the hook that was installed is invoqued and returns the filehandle which is read and eval'd by do().
The last thing I don't understand is when and how the coderef (the second element of the arrayref given to do() is called. It is obviously called as it plays the role of a filter, but I don't understand how.
And the use of the 3-args open() with a scalarref as file name is just a convenient way to avoid having real files everywhere in the hierarchy (plus, it also avoid path-related problems).
But I think that this test script uses a few features that are not documented anywhere except in the source code.
In reply to Re: do [...], @INC subs, 3-args open to heredoc refs (oh my)
by Maddingue
in thread do [...], @INC subs, 3-args open to heredoc refs (oh my)
by ForgotPasswordAgain
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |