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 ...
随机推荐
- 「THP3考前信心赛」解题报告
目录 写在前面&总结: T1 T2 T3 T4 写在前面&总结: \(LuckyBlock\) 良心出题人!暴力分给了 \(120pts\) \(T1\) 貌似是个结论题,最后知道怎么 ...
- 函数式编程(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- PHP-表单提交(form)
PHP-表单提交 一 form表单 GET 将表单内容附加到URL地址后面,提交的信息长度有限制,不可以超过8192个字节,同时不具有保密性,而且只能传送ASCII字符(一般传送的不保密性数据 ...
- 你必须知道的关于操作系统的N个概念!
本文全部概念都是基于<计算机操作系统教程(第四版)>中的表述归纳而成. 操作系统的任务和功能 操作系统的职能是管理和控制计算机系统中的所有硬件和软件资源,合理地组织计算机流程,并为用户提供 ...
- SQL中字符串截取函数(SUBSTRING)
1.left(name,4)截取左边的4个字符 列: SELECT LEFT(201809,4) 年 结果:2018 2.right(name,2)截取右边的2个字符 SELECT RIGHT(201 ...
- B - Power Strings
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...
- 2018 ACM-ICPC 焦作区域赛 E Resistors in Parallel
Resistors in Parallel Gym - 102028E 吐槽一下,网上搜索的题解一上来都是找规律,对于我这种对数论不敏感的人来说,看这种题解太难受了,找规律不失为一种好做法,但是题解仅 ...
- 1152 Google Recruitment
题干前半略. Input Specification: Each input file contains one test case. Each case first gives in a line ...
- Educational Codeforces Round 83 D. Count the Arrays(组合,逆元,快速幂)
题意: 从 m 个数中选 n - 1 个数组成先增后减的长为 n 的数组. 思路: 因为 n 个数中有两个数相同,所以每种情况实际上只有 n - 1 个不同的数--$c_m^{n - 1}$, 除去最 ...
- 牛客练习赛64 D【容斥+背包】
牛客练习赛64 D.宝石装箱 Description \(n\)颗宝石装进\(n\)个箱子使得每个箱子中都有一颗宝石.第\(i\)颗宝石不能装入第\(a_i\)个箱子.求合法的装箱方案对\(99824 ...