Commandline options and arguments understood for Pods2Site processing


Version 1.003


        --usage | -?
    [ -v | --verbose [ -v ... ] | --quiet]
    [ --workdirectory <path> ]
    [ --bindirectory <location> [ --bindirectory ... ] ]
    [ --libdirectory <location> [ --libdirectory ... ] ]
    [ --group name=<query> [ --group name2=<query> ... ] ]
    [ --css <file> ]
    [ --title <title> ]
    [ --style <name> ]
    { <sitedirectory> || :std }


All options can be abbreviated, as long as they are unambiguous. Option matching is case sensitive. Forcibly end option parsing using '--'.


The command line may at any place contain arguments of the form @filename, and which means that the filename will be read for arguments to insert in place. This will help if the command line is very long or is just nicely persisted for reuse.

Further, this will work recursively, i.e. a any resulting argument of the same form, will be read. If the filename is relative, it's assumed relative to the directory the previous file was in.

The example command line pods2site --verbose @myargs will be expanded by reading the myargs file (in the current directory, obviously). The myargs file may contain a line of @/some/path/to/globalargs, and assuming that file in turn contains @extraargs, that file is expected to exist as /some/path/to/extraargs.

Each line in such a file will become a single argument using the following rules:

  • Line continuation

    To avoid physical lines in the file to be extremely long, it can be continued on the next physical (to any length) by ending the line with a backslash (\).

        fee \
        fie \

    Will become the argument 'fee fie foo'.

  • Comments

    Any line (after completed line continuation and not counting inital whitespace) having a '#' as the first character, will be ignored as being a comment.

  • Trimming

    Any beginning and ending whitespace will be trimmed away.

  • Empty lines

    Any empty line will be ignored.


If any of these options are given, the rest of the command line is ignored.

If multiple of these options are given only one will be acted on, in the order --manual, --help, --usage and --version.

--usage | -?

Displays basic usage information.


Displays usage and help with options/arguments.


Displays the full manual page.


Displays the script name and version information.

-v, --verbose, --quiet

By default, a small amount of feedback will be given, including some simple 'spinners' to indicate progress.

To up verbosity, add one or more verbose flags (bundling for singlecharacter options is on, so '-vvv' is the same as '-v -v -v'). Currently, up to verbosity level 5 is used.

To completely turn off all feedback, use '--quiet'.

--workdirectory <path>

By default, a temporary directory is created to hold intermediate data. This is automatically removed when the run is complete.

If you need to look at this data, e.g. for debugging reasons, use '--workdirectory' to appoint a location. The path must not exist beforehand and will not be cleaned up after completion.

Sticky options

The options below are considered 'sticky options' as they are only allowed when a new site is created. After the site has been created, the options are saved in the site and reused when an update is made.

Note that this also means that they can't be used when updating a site.

--title <title>

The title to use for the page and text in header frame. Defaults to 'Pods2Site'.

--mainpage <pagename>

The page to use as the main page (main frame in the framed styles). It defaults to ':std', which makes the autogenerated 'about' page as the main page. If given, must match to a normal page name in the searched directories, e.g. a module found in Some/Path/ should be referred to as 'Some::Path::Module'.

--style <name>

Apart from the pod2html mechanism which is not controlled by this app, a couple of things will be generated in order to make the pod docs navigatable. At minimum an index.html is generated, but typically also at least a TOC and possibly other pages. As this can be done in different fashions, this option allows you to select some different styles of viewing the pod docs.

It uses 'style' names to select different internal implementations. The following are currently available:

  • :std

    This special name will use the currently defined default style. At present this is 'basicframes-tree-toc'.

  • none

    This 'style' does nothing; useful if you want to process the site with something external.

  • basicframes-simple-toc

    This style uses a simple frames layout. The left-hand TOC is implemented as a static indented tree list.

  • basicframes-tree-toc

    This style is very similar to the above, but the TOC is rendered with the HTML5 'details' element in order to create a simple open/close tree control. May need a newer browser to display correctly.

--css <file>

If you want to provide your own CSS file, use '--css'. The file given will be copied to the site and used as an import in the CSS generated by the system and thus may override anything defined in that.

It will be included as a stylesheet in the generated file, and also by passing the '--css' option to the pod2html command.

Note that different 'styles' may generate different things possible to tweak.

--bindirectory <location>

By default, the code will automatically try to ascertain where the running Perl distro places executable scripts, e.g. generally in the vendor, site and core 'bin' locations in the tree (ascertained from Config values).

In case you manually want to add to, or manipulate the order of, the locations, you may provide one or more '--bindirectory' options and they will be searched in the given order. Any locations not existing are silently skipped.

The 'location' is generally a normal path, but some special values have special meaning:

  • :none

    Since the default locations are automatically searched if no '--bindirectory' option is given, this code is provided to completely turn off searching any locations for scripts - just give a single invocation of '--bindirectory :none'.

  • :path

    Search paths in the PATH environment variable in order to find possible scripts with pod.

  • :std

    This will insert the default locations. Useful if you want insert one or more custom paths first, and then add 'all the default places'.

--libdirectory <location>

This is exactly like '--bindirectory', except for lib locations (e.g. where to find core pods, pragmas and ordinary modules).

Aside from taking regular paths, this also handles some special values:

  • :none

    Since the default locations are automatically searched if no '--libdirectory' option is given, this code is provided to completely turn off searching any locations for core/pragma/module pods - just give a single invocation of '--libdirectory :none'.

  • :std

    This will insert the default locations. Useful if you want insert one or more custom paths first, and then add 'all the default places'.

  • :inc

    This will insert the default locations, like :std, but will use the @INC list, which means it will also pick up locations like paths listed in PERL5LIB etc.

--group <name[=query]>

The pods may be separated into groups. By default a grouping loosely similar to an ActivePerl installation will be used, e.g. 'Core', 'Scripts', 'Pragmas' and 'Modules'.

Any number of groups can be specified, and the query will be able to use fields to select which pods go where (see Grep::Query for details of the query language).

It's allowable to have an unnamed group (e.g. <query>) which means matches will not be under any group name and thus left justified directly in the TOC. It is recommended to only match to document with single level names e.g. just the 'Foo' document rather than the 'Bar::Foo' document as the latter would produce an effect looking like a group of 'Bar'.

  • type

    Contains a value of either 'bin', 'lib', for pods found in the bin, lib directories.

    Pods found in root or 'pods::' using 'perl' as prefix gets a value of 'corepod'.

  • name

    The package name for the pod.

    NOTE: pods::perlxxx will be placed in the root as 'perlxxx'.

  • path

    The full path to the pod file.

Note that the groups are independent, i.e. it's possible to have overlapping groups so if this is not desired, the queries must implement that (see the default group queries for examples).

A common situation is to add a group with 'favourites', but keep the default grouping. Just place your own group(s) first and then add a '--group :std' for automatically filling in all the others. For a bit more control, each of the groups in ':std' can be used separately, e.g. as ':std-core'. If this is not sufficient, customize all options with help from below.

The groups will maintain the order given.

Available internal groups:

  • :std-core

    The pods in the 'pods::' namespace.

    Corresponds to the query:

  • :std-scripts

    All pods found in the bin directories, plus the 'pp' module as it documents the 'pp' script.

    Corresponds to the query:

      type.eq(bin) || name.eq(pp)
  • :std-pragmas

    All pods starting with a lowercase letter (but not any selected by the other groups).

    Corresponds to the query:

      type.eq(lib) &&
        name.regexp{^[a-z]} &&
        NOT name.eq(pp)
  • :std-modules

    All pods not selected by the other groups.

    Corresponds to the query:

            type.eq(bin) ||
            type.eq(corepod) ||
            name.eq(pp) ||
  • :std

    All of the above in the order: :std-core, :std-scripts, :std-pragmas, :std-modules.

sitedirectory or :std

This is where the site should be created or updated. If the path doesn't exist, the full site will be created.

If the path exists, it must contain a site created by this tool, and will then be updated efficiently (e.g. only new/updated pods will be written as necessary). In this case however, the listed "Sticky options" above are not allowed on the command line. Instead they will be read from the site and reused as they were when the site was created.

Use :std for the sitedir 'pods2site' inside the Perl tree (will only work if you have write permissions there).


For full information on Pods2Site, see the manual, or use --manual or run perldoc App::Pods2Site to see the manual page.