打印Perl程序的使用方法到标准输出,最简单易维护的方法是什么?我在寻找heredoc技巧或类似有用的方法。忘记单独连续的打印。
编辑1:我面临的问题是需要分别维护使用方法、一般脚本文档和选项处理。我正在寻找一种将这些部分或全部组合起来的方法,带有最小的开销。感谢大家的建议。当我有机会尝试提出的解决方案时,我会接受一个答案。
打印Perl程序的使用方法到标准输出,最简单易维护的方法是什么?我在寻找heredoc技巧或类似有用的方法。忘记单独连续的打印。
编辑1:我面临的问题是需要分别维护使用方法、一般脚本文档和选项处理。我正在寻找一种将这些部分或全部组合起来的方法,带有最小的开销。感谢大家的建议。当我有机会尝试提出的解决方案时,我会接受一个答案。
Pod::Usage
也许可以帮到你?这是由GetOpt::Long
建议的。
Getopt::Std::WithCheck
可以让你结合选项定义和描述,而Getopt::Simple
也能实现同样的功能。
我认为你已经回答了自己的问题。如果使用信息没有自动生成(例如通过Getopt::Long::Descriptive或MooseX::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',
);
perl -I. -MClassB -wle'my $obj = ClassB->new_with_options;' -- --help并且会产生以下结果:
用法:-e [-?psv] [long options...] -? --usage --help 打印此使用信息。 -s --server 要连接的服务器 -p --port 要连接的端口 -v --verbose 打印额外的信息
类似于以下内容:
print <<END;
Usage : foo bar
Foobar foobar.
END
?
Damian Conway有两个有趣的模块,可以使用您的命令行接口文档来生成解析代码:
它们将帮助(强制)您保持与代码匹配的文档。
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