perl 打印简单的help文档
PrintHelp.pm
#!/usr/bin/perl
package PrintHelp;
require Exporter;
use v5.26;
use strict;
use utf8;
use autodie;
use warnings;
use Encode qw(decode encode);
use experimental 'smartmatch'; # 忽略智能匹配的错误警告
use Data::Dumper;
sub new {
my $class = shift;
my $self = {
usages => shift,
options => shift,
};
bless $self, $class;
my $help = "";
$help .= $self->setUsages();
$help .= $self->setOptions();
say encode('utf-8', $help);
return $self;
}
# 获取options中命令的最大长度
sub getMaxLen {
my( $self ) = @_;
my $maxLen = 0;
for(keys %{$self->{options}}) {
$maxLen = length($_) if(length($_) > $maxLen);
}
return $maxLen;
}
# 设置Usages
sub setUsages {
my( $self ) = @_;
my $help = "";
my $usages = $self->{usages};
if(defined($usages)){
my $usagesLen = @{$usages};
for(my $i=0; $i < $usagesLen; $i++){
$help .= ($i == 0) ? "Usage: " : " " x 7;
$help .= "$usages->[$i]\n";
}
$help .= "\n";
}
return $help;
}
# 设置options
sub setOptions {
my( $self ) = @_;
my $help = "";
my $opts = $self->{options};
if(defined($opts)){
my $maxLen = $self->getMaxLen();
$help .= "Options:\n";
for(keys %{$opts}) {
my $keyLen = length($_);
$help .= " ";
$help .= "-$opts->{$_}{\"alias\"}, " if(defined($opts->{$_}{"alias"}));
$help .= "--$_";
$help .= " " x ($maxLen - $keyLen) if($keyLen < $maxLen);
$help .= "\t$opts->{$_}{\"msg\"}" if(defined($opts->{$_}{"msg"}));
$help .= " (default: $opts->{$_}{\"default\"})" if(defined($opts->{$_}{"default"}));
$help .= "\n";
};
}
return $help;
}
our @ISA = qw(Exporter); # 继承Exporter
our @EXPORT_OK = qw(); #
1;
将模块和脚本放在同一目录下
main.pl
#!/usr/bin/perl -I./
use PrintHelp;
PrintHelp->new([
"atree [dir=./] [options]",
"atree ./lib",
"atree ./lib --depath 1",
"or",
"atree ./lib -d 1",
"atree -i ~/.atree -d 3"
],
{
ignores => {
msg => "无视目录配置文件路径.",
alias => "i",
default => "./atree"
},
depath => {
msg => "查询目录深度.",
alias => "d",
default => '0 无限.'
},
help => {
msg => "帮助文档.",
alias => "h",
}
});
λ perl main.pl
Usage: atree [dir=./] [options]
atree ./lib
atree ./lib --depath 1
or
atree ./lib -d 1
atree -i ~/.atree -d 3
Options:
-d, --depath 查询目录深度. (default: 0 无限.)
-i, --ignores 无视目录配置文件路径. (default: ./atree)
-h, --help 帮助文档.
perl 打印简单的help文档的更多相关文章
- Aspose.Words简单生成word文档
Aspose.Words简单生成word文档 Aspose.Words.Document doc = new Aspose.Words.Document(); Aspose.Words.Documen ...
- 一键批量打印EXCEL、WORD文档
一键批量打印EXCEL.WORD文档,本方法也可以打印同一个文档N份,可以批量打印A3.A4文档,包括单.双面打印等.希望能帮到广大朋友.请大家注重原创版权,不得在未经许可的下转载.传播,或者用来对同 ...
- 用java将简单的word文档换成pdf文档
用java将简单的word文档换成pdf文档的方式很多,因为很多都没有实际测试过,所以这里就先泛泛的说一下 整体上来看分两种: 1.纯java代码实现,有很多优秀的开源软件可以用,比如poi,itex ...
- 用python批量生成简单的xml文档
最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...
- C# WebForm 使用NPOI 2 生成简单的word文档(.docx)
使用NPOI可以方便的实现服务端对Word.Excel的读写.要实现对Word的读写操作,需要引用NPOI.OOXML.dll,应用命名空间XWPF. 本文使用NPOI 2.0实现对Word的基本生成 ...
- 超级简单!把文档转换成网页格式(Core)
因为需要把好多的文档放在服务器上访问,最开始是使用第3方网站www.aconvert.com,这个其实也挺方便的, 最后由于一些需求原因,最终只有依靠代码来进行,以下是简化后的代码 创建一个控制台应用 ...
- WSDL 文档-一个简单的 XML 文档
WSDL 文档是利用这些主要的元素来描述某个 web service 的: <portType>-web service 执行的操作 <message>-web service ...
- 一个简单的 HTML 文档,带有最基本的必需的元素
<html> <head> <title>文档的标题</title> </head> <body> 文档的内容... ... & ...
- SpringBoot结合swagger2快速生成简单的接口文档
1. pom.xml中加入依赖 <dependency> <groupId>com.spring4all</groupId> <artifactId>s ...
随机推荐
- 20201103gryz模拟赛解题报告
写在前面 昨天忘写了来补上 T1位运算乱搞一会没搞出来, 打完T4floyd暴力分之后发现T2树状数组可以骗点分 打完T3暴力手模了一遍样例之后发现T3就是个线段树板子 最后就非常愉快的拿到175pt ...
- (十六)配置多数据源,整合MybatisPlus增强插件
配置多数据源,整合MybatisPlus增强插件 多数据简介 MybatisPlus简介 1.案例实现 1.1 项目结构 1.2 多数据源配置 1.3 参数扫描类 1.4 配置Druid连接池 1.5 ...
- SpringBoot使用SpringDataJPA完成CRUD
创建UserJPA接口并且继承SpringDataJPA内的接口作为父类: UserJPA继承了JpaRepository接口(SpringDataJPA提供的简单数据操作接口).JpaSpecifi ...
- codeblocks下载安装及快捷键
100MB的下载链接:自带mingw http://pan.baidu.com/s/1o6BgFP4 13.12版本 gcc 4.7.1的 这是windows版本的 linux下编译安装:参考: ...
- linux常用命令(shell脚本常用命令)(grep、cut、sort、uniq、seq、tr、basename、dirname)
本章命令: 1 2 3 4 5 6 grep cut sort uniq seq tr 1.grep 作用:过滤文本内容 选项 描述 -E :--extended--regexp 模式是扩展正则表达式 ...
- OsgEarth开发笔记(一):Osg3.6.3+OsgEarth3.1+vs2019x64开发环境搭建(上)
前言 OSG研究之后,做地理GIS显示了地球:<项目实战:Qt+OSG教育学科工具之地理三维星球>,这一文章是基于OSG做的,而基于OsgEarth是可以进一步对地球进行深度操作,所以 ...
- 2019CCPC厦门站总结
这是一篇打铁游记~ $day1$ 坐动车去厦门,三个人买了一堆零食,吃了一路,除了睡觉嘴巴基本就没停过.当然,我们到酒店后也去吃了烧烤,我们虽然是在岛外的厦门北站的下的,还是很幸运的找到一家好吃了,乌 ...
- 【noi 2.6_9265】取数游戏(DP)
题意:从自然数1到N中不取相邻2数地取走任意个数,问方案数. 解法:f[i][1]表示在前i个数中选了第i个的方案数,f[i][0]表示没有选第i个.f[i][1]=f[i-1][0]; f[i][ ...
- Redundant Paths POJ - 3177 把原图变成边—双连通图
无向图概念:(这里的x->y表示x和y之间有一条无向边)1.桥:对于一个无向图,如果删除某条边后,该图的连通分量增加,则称这条边为桥 比如1->2->3->4这样一个简单得图一 ...
- 郁闷的出纳员 HYSBZ - 1503
OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他 ...