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

7

打印Perl程序的使用方法到标准输出,最简单易维护的方法是什么?我在寻找heredoc技巧或类似有用的方法。忘记单独连续的打印。

编辑1:我面临的问题是需要分别维护使用方法、一般脚本文档和选项处理。我正在寻找一种将这些部分或全部组合起来的方法,带有最小的开销。感谢大家的建议。当我有机会尝试提出的解决方案时,我会接受一个答案。


1
有一个重要的限制我还没有提到。它是仅依赖于核心模块,或者根本不使用任何模块。在这种精神下,Pod::Usage 是最好的选择。它不能像我想的那样生成用法,但我已经比heredocs更喜欢它了。如果我可以自由地使用任何模块,我会非常认真地尝试Euclid! - Philippe A.
5个回答

11

我喜欢Pod::Usage::CommandLine,它以整洁的方式结合了Pod::UsageGetOpt::Long - daxim

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
并且会产生以下结果:
    用法:-e [-?psv] [long options...]
            -? --usage --help  打印此使用信息。
            -s --server        要连接的服务器
            -p --port          要连接的端口
            -v --verbose       打印额外的信息

3

类似于以下内容:

print <<END;
Usage : foo bar

Foobar foobar.
END

?


3

Damian Conway有两个有趣的模块,可以使用您的命令行接口文档来生成解析代码:

它们将帮助(强制)您保持与代码匹配的文档。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接