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文档的更多相关文章

  1. Aspose.Words简单生成word文档

    Aspose.Words简单生成word文档 Aspose.Words.Document doc = new Aspose.Words.Document(); Aspose.Words.Documen ...

  2. 一键批量打印EXCEL、WORD文档

    一键批量打印EXCEL.WORD文档,本方法也可以打印同一个文档N份,可以批量打印A3.A4文档,包括单.双面打印等.希望能帮到广大朋友.请大家注重原创版权,不得在未经许可的下转载.传播,或者用来对同 ...

  3. 用java将简单的word文档换成pdf文档

    用java将简单的word文档换成pdf文档的方式很多,因为很多都没有实际测试过,所以这里就先泛泛的说一下 整体上来看分两种: 1.纯java代码实现,有很多优秀的开源软件可以用,比如poi,itex ...

  4. 用python批量生成简单的xml文档

    最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...

  5. C# WebForm 使用NPOI 2 生成简单的word文档(.docx)

    使用NPOI可以方便的实现服务端对Word.Excel的读写.要实现对Word的读写操作,需要引用NPOI.OOXML.dll,应用命名空间XWPF. 本文使用NPOI 2.0实现对Word的基本生成 ...

  6. 超级简单!把文档转换成网页格式(Core)

    因为需要把好多的文档放在服务器上访问,最开始是使用第3方网站www.aconvert.com,这个其实也挺方便的, 最后由于一些需求原因,最终只有依靠代码来进行,以下是简化后的代码 创建一个控制台应用 ...

  7. WSDL 文档-一个简单的 XML 文档

    WSDL 文档是利用这些主要的元素来描述某个 web service 的: <portType>-web service 执行的操作 <message>-web service ...

  8. 一个简单的 HTML 文档,带有最基本的必需的元素

    <html> <head> <title>文档的标题</title> </head> <body> 文档的内容... ... & ...

  9. SpringBoot结合swagger2快速生成简单的接口文档

    1. pom.xml中加入依赖 <dependency> <groupId>com.spring4all</groupId> <artifactId>s ...

随机推荐

  1. CF413C

    正文 题意: 给 n 个关卡,每个关卡得分为 ai,有 m 次机会可以选择一 个关卡通过后不得分,而将现有得分翻倍 你可以安排关卡的通过顺序和策略,求最大得分. 分析: 看到这道题首先想到的就是贪心, ...

  2. LOJ10160周年纪念晚会

    题目描述 Ural 州立大学的校长正在筹备学校的 80 周年纪念聚会.由于学校的职员有不同的职务级别,可以构成一棵以校长为根的人事关系树.每个资源都有一个唯一的整数编号,从 1 到 N 编号,且对应一 ...

  3. poj 2752Seek the Name, Seek the Fame

    Seek the Name, Seek the Fame Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d &am ...

  4. SpringCloud-常用组件介绍

    SpringCloud-常用组件介绍 分布式系统开发用于分布式环境(多个服务器不在同一个机房,同一个业务服务在多台服务器运行) Spring Cloud 是基于Springboot的分布式云服务架构, ...

  5. servelet 实现Post接口访问

    先上代码: package com.jovtec.galaxy.mailbox; import java.io.BufferedReader; import java.io.IOException; ...

  6. python模块----paramicko模块 (ssh远程主机并命令或传文件)

    paramiko模块 paramicko模块是非标准库模块,需要pip下载 paramicko:模拟ssh登陆linux主机,也有上传下载功能.ansible自动化部署软件底层就有应用paramick ...

  7. Kwp2000协议的应用(硬件原理使用篇)

    作者:良知犹存 转载授权以及围观:欢迎添加微信:becom_me 发现K线没有过多的文章描述,作为一个开发过K线的人,不写些文章帮助后来的人岂不是太浪费开发经验了呢. 总述     KWP2000是一 ...

  8. B - Power Strings

    Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...

  9. 【洛谷 p3373】模板-线段树 2(数据结构--线段树)

    题意:已知一个数列,你需要进行下面三种操作:1.将某区间每一个数加上x:2.将某区间每一个数乘上x:3.求出某区间每一个数的和. 解法:(唉 :-(,这题卡住我了......)对于加法和乘法的混合操作 ...

  10. 2020牛客暑期多校训练营 (第二场) All with Pairs

    传送门:All with Pairs 题意:给你n个字符串,求出,f(si,sj)的意思是字符串 si 的前缀和字符串 sj 后缀最长相等部分. 题解:先对所有的字符串后缀hash,用map记录每个h ...