我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARGV 的数组强大多了.我想大家知道在 Linux 中有的参数有二种形式.

  • 长参数  –help
  • 短参数   -h

也就是-和–的分别.–表示完整参数.-表示简化参数.在 Perl 的这个模块中也支持这二种方法.
这要介绍的二 Getopt 其实有二个模块,一个叫 Getopt::Long 一个叫 Getopt::Std.下面就只介绍 Getopt::Long 了.因为这个模块更加强大

Getopt::Long 模块

初始化 Perl命令行中所接受的参数,简化了命令行参数的解析.下面看程序的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
use strict;
use Getopt::Long;
use Smart::Comments;
my @libs    = ();
my %flags   = ();
my ( $verbose, $all, $more, $diam, $debug, $test, $step);
GetOptions(
        'verbose+'  => \$verbose,
        'more!'     => \$more,
        'debug:i'   => \$debug,
        'lib=s'     => \@libs,
        'flag=s'    => \%flags,
        'test|t'    => \$test,
        'all|everything|universe' => $all,
);
### $verbose
### $more
### $debug
### $test
### @libs;
### %flags

这就是使用的方法,下面是详细解释,注意看 GetOptions 中的 => 前面的部分.下面是详解

  • ‘verbose+’  接有 + 的选项不接收变量,后面不需要加内容.直接使用就行了,会在每次出现时增加一次变量,就是讲命行时在参数中 -verbose -verbose 出现二次时 verbose 的值就会变成 2.
  • ‘more!’        接有 ! 的选项不接收变量(也就是讲后面不需要加参数 –more 来使用就行了),只要命令行中出现了这个参数,就会默认是 1 ,是用来设置打开和关掉一个功能的>.可以在参数前加 no 变成负的例如-nomore.
  • ‘flag=s’        接有 = 的字符串要求接字符串(s)、整数(i),或者浮点(f)等类型的变量.
  • ‘debug:i’      接有 : 的选项会接受缺省为0或者为空字符串的可选变量
  • ‘test|t’          接有 | 的选项表示可以给 –test 简写为 -t.
  • ‘lib=s’     => @libs    如果相关联的变量是个数组, 如这个地方的 @libs, 那么选项可以多次出现, 值可以被推到数组里.
  • ‘flag=s’    => %flags  如果相关联的变量是个散列, 那么就要求一个键=值(key=value)对, 并被插入到散列里.

备注:
     在匹配参数名的时候,GetOptions 在缺省设置下会忽略大小写,默认参数被简写为唯一的最短字符串(首字母)(例如,-m 代表 -more. 相同的首字母时,会加上第二个字母来区分)

Getopt 模块的程序使用的方法:

根据上面的例子,比如我们写了一个程序叫 test.pl .我们只需要在命令行中加如下参数:

1
2
$ ./test.pl  --verbose --verbose -v --more \
      --lib='/lib' -l '/lib64' --f a=1 --flag b=2  --debug 2 -t fukai

有点小长,在看看上面的,就会明白意思了.在这个地方,我使用了 Smart::Comment 模块,所以在最下面的 ###  是会输出这个变量本身的内容的.这也是一个超级强大的模块.我们来看看输入这些参数后.会输出什么内容吧.

1
2
3
4
5
6
7
8
9
10
11
### $verbose: 3
### $more: 1
### $debug: 2
### @libs: [
###          '/lib',
###          '/lib64'
###        ]
### %flags: {
###           a => '1',
###           b => '2'
###         }

在对一下上面输入的参数,明白了吧.

Getopt 模块的简单总结

(1. 带值参数传入程序内部
※参数类型:整数, 浮点数, 字串

1
2
3
GetOptions(
    'tag=s' => \$tag
);

‘=’表示此参数一定要有参数值, 若改用’:’代替表示参数不一定要有参数值
‘s’表示传递字串参数, 若为’i’表传递整数参数, 若为’f’表传递浮点数.
带值参数使用的方法

1
2
$ test.pl --tag=string
$ test.pl --tag string

(2. 需要传送多个值的参数到程序中.
比如需要传几个值到 @libfiles 中的操作方法.

1
2
GetOptions ("library=s" => \@libfiles);
GetOptions ("library=s@" => \$libfiles);

参数传到 @$tag
使用的方法

1
$ test.pl --library lib/stdlib --library lib/extlib

(3. 对键值对的参数传递
有时我们需要传送一些键值对到程序中进行处理,就需要使用到这个功能了.

1
2
GetOptions ("define=s" => \%defines);
GetOptions ("define=s%" => \$defines);

使用的方法

1
$ test.pl --define os=linux --define vendor=redhat

(4. 参数的别名
我们需要参数加个简写之类的别名时,可以使用下面的方法

1
GetOptions ('length|height=f' => \$length);

第一个名称为 primary name, 其他的名称为 alias(可有多个alias名称) ,当使用hash参数时, 使用primary name作为key值

转载于:https://www.cnblogs.com/jiangzhaowei/p/5675946.html

在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数相关推荐

  1. python中的choices函数_用choices给命令行参数设置范围

    argparse模块的add_argument函数,有一个choices参数,我们可以通过此参数来给命令行参数的取值设置一个任意的范围.在命令行参数取值范围小而且有限的情况下,此方法还是很方便的. 下 ...

  2. python命令行参数有什么用_一文看懂命令行参数的用法——Python中的getopt神器

    参考原文: Python模块之命令行参数解析 - 每天进步一点点!!! - 博客园 https://www.cnblogs.com/madsnotes/articles/5687079.html py ...

  3. Python3中使用argparse模块解析命令行参数

    argparse是Python的一个标准模块,用于解析命令行参数,即解析sys.argv中定义的参数.实现在:https://github.com/python/cpython/blob/main/L ...

  4. Python中最好用的命令行参数解析工具

    Python 做为一个脚本语言,可以很方便地写各种工具.当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现). 如果要以命令行执行,那你需要解析一个命令行参数解 ...

  5. python 命令行参数-python中命令行参数

    python中有一个模块sys,sys.argv这个属性提供了对命令行参数的访问.命令行参数是调用某个程序时除程序名外的其他参数. sys.argv是命令行参数的列表 len(sys.argv)是命令 ...

  6. 函数 —— 分析命令行参数 getopt() getopt_long() getopt_long_only()

    为什么需要命令行解析函数? 只按顺序处理参数的话,一些"可选参数"的功能将很难实现. 在Linux中,我们可以使用getopt.getopt_long.getopt_long_on ...

  7. python命令行参数作用_Python命令行参数解析模块argparse

    前言 更多内容,请访问我的 个人博客. 以前 optparse 比较火,但是在python2.7版本后,官方不再维护这个模块,转而大力支持 argparse . argparse 模块可以让人轻松编写 ...

  8. 命令行参数解析函数 getopt、getopt_long

    getopt 函数在头文件 <unistd.h> 中,它可以解析我们传入的命令行参数. 可以实现类似 gcc -o .rm -rf 等命令. man 3 getopt .在线版:http: ...

  9. Shell命令 getopts/getopt用法详解 命令行参数

    Shell命令行参数解析getopts/getopt用法详解 在Linux bash中,可以用以下三中方式解析命令行参数: 直接处理:使用$1.$2.$3- 进行解析 getopts:短选项的情况,例 ...

最新文章

  1. unity3d显示c4d材质_C4D小白最常踩的9个坑,看看你中招了没?
  2. docker java 不兼容_Apple M1 芯片不支持 Docker?Docker:正在努力适配
  3. Codeforces Round #506 (Div. 3) - C. Maximal Intersection (思维,模拟)
  4. 浅析C语言中strtol()函数与strtoul()函数的用法
  5. 怎样根据字段域查找到其在数据库中关系与属性
  6. 博弈论入门 HDU 1850
  7. C++类库:OTL通用的数据库连接类库
  8. PHP Smarty template for website
  9. LeetCode 167. Two Sum II - Input array is sorted
  10. 特斯拉:召回不涉及国产车型 也与“刹车失灵”无关
  11. Mac OS 文件、文件夹重命名的方法
  12. Windows10 Virtualization Technology虚拟化技术功能
  13. sap 打印预览界面点击打印时记录打印次数_9个Excel打印神技巧!从此打印不求人!...
  14. 【MFC开发(8)】下拉框控件Combo Box
  15. win7系统无法连接蓝牙的强推方案
  16. 桌面图标全部成被选中状态解决办法
  17. 主数据管理平台应具备的六大功能
  18. isPrime 判断素数的函数
  19. 一语中的丨高对抗重实战攻防视角下,企业安全运营到底该怎么做?
  20. 随地大小便的中世纪欧洲人 是真的吗

热门文章

  1. c语言中sizeof是一个标准库函数,对C语言中的sizeof的介绍分析
  2. java 如何秒速写一个线程启动
  3. 应用人工智能识别增加教育医疗产品的趣味和实用性
  4. datetime默认当前时间_简述Python培训之time和datetime的区别
  5. python如何安装wordcloud_基于python的wordcloud库的安装方法
  6. 【Elasticsearch】Get 查询获取不到数据,但是用 _search 就可以查询到
  7. 【Elasticsearch】es 7 Failed to parse value [analyzed] as only [true] or [false] are allowed
  8. 【Elasticsearch】Elasticsearch 索引 索引模板 生命周期 关系
  9. 【Kafka】Kafka如何彻底删除Kafka中的topic
  10. SparkSQL源代码:总体概述