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. Spring 动态代理时是如何解决循环依赖的?为什么要使用三级缓存?

    前言 在研究 『 Spring 是如何解决循环依赖的 』 的时候,了解到 Spring 是借助三级缓存来解决循环依赖的. 同样在上一节留下了疑问: 循环依赖为什么要使用三级缓存?而不是使用二级缓存? ...

  2. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...

  3. 排查 Linux 系统运行速度慢

    排查 Linux 系统运行速度慢 一.检查CPU信息 二.使用top检查cpu负载 三.iotop进行检查 四.检查启动的服务 五.free检查闲置内存空间 一.检查CPU信息 在 Linux 系统中 ...

  4. KVM (虚拟机创建及管理,存储管理)

    创建KVM虚拟机 1.图形化界面创建 第一步:查看软件包组 yum grouplist 第二步:下载GUI界面的软件包组 yum groupinstall "Server with GUI& ...

  5. thymeleaf第二篇:理解原理并为后面springboot进行整合进行铺垫

    官方入门之从虚拟商店理解thymeleaf 参考文档: 简单使用Thymeleaf API渲染模板生成静态页面 邮件通知改造之Thymeleaf渲染模板生成静态页面--看懂会帮助理解springboo ...

  6. 弱网测试之Fidder

    是用Fidder可以模拟若罔测试. 1.Fiider设置 fiddler中选中Rules->Cutomize Rules,在文件中搜索关键字:m_SimulateModem: 修改m_Simul ...

  7. 微信支付V3 SDK Payment Spring Boot 1.0.6 发布,实现留守红包,助力抗疫

    春节将至,为防控疫情,多地政府提倡员工.外来务工者留守本地过年,并鼓励企业向员工发放"留守红包".为此,微信支付推出"春节留守红包"能力,希望可以协助有发放需求 ...

  8. Hive配置Tez引擎踩坑

    框架版本 Hadoop 2.7.7 Hive 2.3.7 Tez 0.9.2 保证hadoop集群启动,hive元数据服务启动 上传tez到HDFS tar -zxvf apache-tez-0.9. ...

  9. Codeforces Round #631 (Div. 2)

    Contest Info Practice Link Solved A B C D E F 4/6 O O Ø       O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试 Solu ...

  10. HDU 3416 Marriage Match IV (最短路径&&最大流)

    /*题意: 有 n 个城市,知道了起点和终点,有 m 条有向边,问从起点到终点的最短路一共有多少条.这是一个有向图,建边的时候要注意!!解题思路:这题的关键就是找到哪些边可以构成最短路,其实之前做最短 ...