如何在Perl中打印程序使用?

时间:2010-08-18 19:27:28

标签: perl

将stl程序的用法打印到stdout最简单的方法是什么?我正在寻找heredoc技巧或任何类似的有用的东西。忘记单独的连续打印。

编辑1:我多次面临的问题是必须单独维护使用情况,一般脚本文档和选项处理。我一直在寻找一种方法来将一些或所有这些与最小的开销相结合。感谢您提出的许多建议。当我有机会试验提出的解决方案时,我会接受答案。

5 个答案:

答案 0 :(得分:11)

Pod::Usage也许?这是GetOpt::Long建议的。

Getopt::Std::WithCheck允许您在说明中组合选项的定义,Getopt::Simple也会这样做。

答案 1 :(得分:4)

我想你刚回答了自己的问题。如果未自动生成使用信息(例如Getopt::Long::DescriptiveMooseX::Getopt),则通常使用heredoc子句。

package ClassA;
use Getopt::Long::Descriptive;

my ($opt, $usage) = describe_options(
    'my-program %o <some-arg>',
    [ 'server|s=s', "the server to connect to"                  ],
    [ 'port|p=i',   "the port to connect to", { default => 79 } ],
    [],
    [ 'verbose|v',  "print extra stuff"            ],
    [ 'help',       "print usage message and exit" ],
);

print($usage->text), exit if $opt->help;


package ClassB;
use Moose;
with' MooseX::Getopt';

has server => (
    is => 'ro', isa => 'Str',
    traits    => [ 'Getopt' ],
    cmd_aliases => ['s'],
    documentation => 'the server to connect to',
);
has port => (
    is => 'ro', isa => 'Int',
    traits    => [ 'Getopt' ],
    cmd_aliases => ['p'],
    default => 79,
    documentation => 'the port to connect to',
);
has verbose => (
    is => 'ro', isa => 'Bool',
    traits    => [ 'Getopt' ],
    cmd_aliases => ['v'],
    documentation => 'print extra stuff',
);

您可以像这样调用ClassB(如果您没有使用MooseX :: Runnable或脚本来构造对象):

    perl -I. -MClassB -wle'my $obj = ClassB->new_with_options;' -- --help

并产生:

    usage: -e [-?psv] [long options...]
            -? --usage --help  Prints this usage information.
            -s --server        the server to connect to
            -p --port          the port to connect to
            -v --verbose       print extra stuff

答案 2 :(得分:3)

类似的东西:

print <<END;
Usage : foo bar

Foobar foobar.
END

答案 3 :(得分:3)

Damian Conway有两个有趣的模块,它们使用命令行界面的文档来生成解析代码:

他们将帮助(强制)您维护与代码匹配的文档。

答案 4 :(得分:1)

您可以使用here-doc:

use Getopt::Long;

my $USAGE = <<"USAGE";
Usage: some_script.pl -env=[dev|qa|pr]

Regular options:

-env        -- Valid values for env are 'dev', 'qa', 'pr'

USAGE

our ($opt_env);

die $USAGE
  unless GetOptions ("env=s"   => \$opt_env); # string