in reply to Templating pod generation?

The thing to remember is that Pod parsers don't execute code. Pod and Perl are just two languages that can live in the same file and each parser just ignores the other language. So you can't use Perl constructs or source filters to affect how Pod parsers see the file.

However, you might be able to take advantage of the fact that perldoc will prefer a .pod file to a .pm file. For an example of how that could work, consider Pod::WikiDoc.

Pod::WikiDoc parses a .pm file containing "wikidoc" Pod format blocks when the distribution tarball is created and creates a matching .pod file with the wikidoc blocks converted to Pod. On installation, the .pod are what perldoc finds and end-users never need to know or care that I used Pod::WikiDoc to write my Pod.

You could do something similar where some template Pod format block gets expanded into a separate .pod file. You just need to customize a Pod parser to pre-process the .pm file, process your templates, and stick the results into a .pod file.

-xdg

Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Replies are listed 'Best First'.
Re^2: Templating pod generation?
by diotalevi (Canon) on Jul 19, 2006 at 14:44 UTC

    I thought pod parsers executed some code. I remember getting warnings when running perldoc as root that it was allowed to execute code.

    ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊

      I thought pod parsers executed some code.

      Well, perldoc, the program, allows you to specify an arbitrary Pod parser to use for formatting. Pod parsers can do anything they want, including running malicious code. So I suspect that was the restriction on running as root.

      But I don't think that perlpodspec says anything about code execution -- that was my point about Pod and code being two separate languages.

      -xdg

      Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

        Drat and double drat. I guess I just lose. Or really, I write my code in a templated .PL file which EU::MM will run and it'll have to generate my .pm and pod for me. Blech.

        ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊