我们在linux常常用到一个程序需要加入参数,现在了解一下perl中的有关控制参数的函数.getopt.在linux有的参数有二种形式.一种是–help,另一种是-h.也就是-和–的分别.–表示完整参数.-表示简化参数.

在perl中也分这二种.

Getopt::Std模块的功能: 初始化perl命令行中所接受的参数,简化了命令行参数的解析。

简化参数例子:

1 2 3 4 5 6 7 8 9 10
#!/usr/bin/perl -w 
use strict; 
use Getopt::Std;   
use vars qw($opt_a $opt_b $opt_c);
getopts('a:b:c:');   
print "\$opt_a =>; $opt_a\n" 
if $opt_a; print "\$opt_b =>; $opt_b\n" 
if $opt_b; print "\$opt_c =>; $opt_c\n" 
if $opt_c;

输出如下:

[root@mail test]# ./getopt.pl -a aa -b bb -c cc

$opt_a =>; aa

$opt_b =>; bb $opt_c =>; cc

完整参数

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 Getopt::Long; 
Getopt::Long::GetOptions( 'page=i' => \$page,'onoff!' => \$onoff, 'help' => \$wants_help, 'name=s' => \$name, 'number:i' =>\$number);   }   
if(defined($page))
{
   
    
  print "page flag set to $page "
}
if(defined($onoff))

          
  print "onoff flag set to $onoff "; 

if(defined($wants_help))

         
  print "help flag set to $wants_help "; 

if(defined($name))
{
          
  print "name flag set to $name "; 
}
if(defined($number))

          
  print "number flag set to $number "; 
}

./getlong.pl -name AAA
name flag set to AAA

带值参数
※参数类型:整数, 浮点数, 字串

GetOptions( ‘tag=s’ => \$tag );
‘=’表示此参数一定要有参数值, 若改用’:'代替表示参数不一定要有参数值
‘s’表示传递字串参数, 若为’i'表传递整数参数, 若为’f'表传递浮点数
example:
test.pl –tag=string
or
test.pl –tag string

多参数值的参数

GetOptions ("library=s" => \@libfiles);
参数传到 @tag
or
GetOptions ("library=s@" => \$libfiles);
参数传到 @$tag
example:
test.pl –library lib/stdlib –library lib/extlib

参数别名
GetOptions (‘length|height=f’ => \$length);
第一个名称为primary name, 其他的名称为alias(可有多个alias名称)
当使用hash参数时, 使用primary name作为key值

参数的简称及大小写
GetOptions (‘length|height=f’ => \$length, "head" => \$head);
若没有特别设定, Getopt会忽略参数的大小写, 也就是 -l or -L 指的都
是同一个参数(–length)

对于不传递参数的选项,也就是一些开关类型,可以在第一部分后接“!”,这表示该选项不接收自变量,但是可以通过在前面加上no变成负的(例如,“more”选项的-nomore)。如果不是用“!”,而是“+”,这表示它会在每次出现的时候增加一个变量。如果选项出现在命令行里,那么相关的变量被设置为1;如果负的选项出现了,那么相关的变量就被设置为0。

hash参数值(有名称及参数值)
GetOptions ("define=s" => \�fines);
or
GetOptions ("define=s%" => \$defines);
example:
test.pl –define os=linux –define vendor=redhat

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

http://www.cnblogs.com/xianghang123/archive/2011/07/14/2106586.html

======================================================================================

示例程序:

getopt.pl;

 
1 #!/usr/bin/perl -w
2 #use strict;
3 use Getopt::Std;
4 use vars qw($opt_a $opt_b $opt_c);
5 getopts('a:b:c');
6 print "opt_a =>;$opt_a\n" if $opt_a;
7 print "opt_b =>;$opt_b\n" if $opt_b;
8 print "opt_c =>;$opt_c\n" if $opt_c;

注释:'a:b:c',a和b后有冒号,表示-a,-b后面要跟参数.c后面没有冒号,表示-c后面不带参数.

而且-a,-b后所跟的参数分别赋给变量$opt_a和$opt_b,对于变量$opt_c,若命令行加了-c,则$opt_c=1,否则为0.

如:

perl getopt.pl -a aa -b bb -c cc

显示:

opt_a =>;aa
opt_b =>;bb
opt_c =>;1

如:

perl getopt.pl -a aa -b bb
opt_a =>;aa
opt_b =>;bb

(因为加了if判断,所以$opt_c没有显示);

上面的例子,用Getopt::Long可以这样实现

上面的例子,用Getopt::Long可以这样实现

getoptions.pl

 
1 #!/usr/bin/perl
2 use Getopt::Long;
3 use vars qw($opt_a $opt_b $opt_c);
4 GetOptions("a=s"=>\$opt_a,"b|opt_b:i"=>\$opt_b,"c"=>\$opt_c);
5 print "opt_a =>;$opt_a\n" if $opt_a;
6 print "opt_b =>;$opt_b\n" if $opt_b;
7 print "opt_c =>;$opt_c\n" if $opt_c;
a=s表示可以用-a aa的形式,即变量-a 类型是字符串
b|opt_b:i表示可以用-b或者-opt_b来取得变量,类型为整型
c表示如果有-c的参数值则$opt_c等于1,否则等于0 其中
s表示字符串,i表整型,f表示浮点型
=表示要有参数值或者没有这个参数如:perl getoptions.pl -a aa -b bb或者perl getoptions.pl -b bb
:表示可有参数值也可以没有参数值
如:
perl getoptions.pl -a aa -b 2 -c cc
opt_a =>;aa
opt_b =>;2
opt_c =>;1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
http://www.cnblogs.com/zjking99/articles/2117258.html
=================================================================================

Perl Getopt and GetOptions

 

Two Perl modules (Getopt and Getoptions::Long) work to extract program flags and arguments much like Getopt and Getopts do for shell programming. The Perl modules, especially GetOptions::Long, are much more powerful and flexible.
Simple scripts show the power of these:
#!/usr/bin/perl # script is "./g" use Getopt::Std; %options=(); getopts("od:fF",\%options); # like the shell getopt, "d:" means d takes an argument print "-o $options{o}\n" if defined $options{o}; print "-d $options{d}\n" if defined $options{d}; print "-f $options{f}\n" if defined $options{f}; print "-F $options{F}\n" if defined $options{F}; print "Unprocessed by Getopt::Std:\n" if $ARGV[0]; foreach (@ARGV) { print "$_\n"; }
Trying it out:
bash-2.05a$ ./g -f -d F -o -F -o 1 -d F -f 1 -F 1 bash-2.05a$ ./g -o -d foo -o 1 -d foo bash-2.05a$ ./g -o rough -d foo -o 1 Unprocessed by Getopt::Std: rough -d foo
Processing of arguments stops when it saw "rough".
If you leave off a required argument, it just gets swallowed:
bash-2.05a$ ./g -d bash-2.05a$ ./g -d foo -d foo
But it's easily confused:
bash-2.05a$ ./g -d -o -f -d -o -f 1
It thinks that -o is the argument of -d.
bash-2.05a$ ./g -k Unknown option: k %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
http://aplawrence.com/Unix/perlgetopts.html
===========================================================================
另外,见:http://www.perlmonks.org/?node_id=892257
以及http://perldoc.perl.org/Pod/Usage.html
中的解释,推荐使用 Getopt::Long
还有一种方法是在程序开始时添加代码:
require "getopt.pl";
然后使用Getopt(abc);即可
便可使用 
$opt_a和$opt_b,$opt_c,他们以及分别指向了各自后面跟着的文件。
例如命令输入为:  perl myprogram.pl -a filename1 -b filename2 -c filename3 则$opt_a=>filename1  $opt_b

[Perl] Getopt 函数来接收用户参数的使用的更多相关文章

  1. 正则replace 回调函数里接收的参数是什么?

    前言 我们都知道 replace 在做替换处理方面会很常用,通常也是第一个会想到的方法.replace 第一个参数可以传入 string 或 RegExp,第二个参数可以传入 string 或 一个回 ...

  2. 如何使用getopt()函数解析参数

    最近在写程序的过程中,把一部分时间都花费在程序对参数的处理上.今天听了学长说到getopt函数,才发现原来c里面还有一个专门解决参数处理的函数,查询了相关资料,这里简单总结一下. 使用int main ...

  3. Python中接收用户的输入

    一.如何去接收用户的输入?使用函数 input() 函数 input() 让程序暂停运行,等待用户输入一些文本,获取用户的输入后,Python将其存储到一个变量中,以方便后期使用. name = in ...

  4. getopt函数

    getopt -- 解析命令的可选项   [说明]getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下:   1.形如:cmd [-a][-b] //对短选项的解析: ...

  5. getopt函数的使用——分析命令行参数

    getopt(分析命令行参数) getopt(分析命令行参数) 短参数的定义 返回值 范例 getopt_long 相关函数表头文件#include<unistd.h> 函数声明int g ...

  6. TP5:使用了INPUT函数来接收参数了,还需再过滤SQL注入吗

    TP5:使用了INPUT函数来接收参数了,还需再过滤SQL注入吗,默认的INPUT函数都做了哪些动作啊 有了PDO参数绑定 基本上不需要考虑sql注入的问题(除非自己拼接SQL),需要考虑的是XSS方 ...

  7. 传说用户发来的请求是在JIoEndpoint的accept函数中接收的,是tomact与外界交互的分界点

    传说用户发来的请求是在JIoEndpoint的accept函数中接收的, 这是tomact与外界交互的分界点,所以来研究一下, >>>>>>>>> ...

  8. Python基础之只接收关键字参数的函数

    当我们希望函数的某些参数强制使用关键字参数时,可以将强制关键字参数放到某个*后面就能得到这种效果.比如: def recv(maxsize, *, block): """ ...

  9. PHP命令行脚本接收传入参数的三种方式

    通常PHP都做http方式请求了,可以使用GET or POST方式接收参数,有些时候需要在shell命令下把PHP当作脚本执行,比如定时任务.这就涉及到在shell命令下如何给php传参的问题,通常 ...

随机推荐

  1. yii点击上传图片后立即显示

    结合yii上传做的图片上传后立即显示,自己琢磨的,有点low <script type="text/javascript">//下面用于图片上传预览功能function ...

  2. 转载:奇异值分解(SVD) --- 线性变换几何意义(上)

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

  3. POJ 3268 Silver Cow Party (双向dijkstra)

    题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

  4. JS控制文本框textarea输入字数限制

    <html> <head> <title>JS限制Textarea文本域字符个数</title> <meta http-equiv="C ...

  5. jquery节点操作

    很久没有jquery写东西了,最近使用jquery的时候发现很多节点的操作都不太熟悉了,于是就进行了一个小小的总结. 创建节点:var dom=$('<div></div>') ...

  6. Spring MVC 使用拦截器优雅地实现权限验证功能

    在上一篇 SpringAOP 实现功能权限校验功能 中虽然用AOP通过抛异常,请求转发等勉强地实现了权限验证功能,但感觉不是那么完美,应该用拦截器来实现才是最佳的,因为拦截器就是用来拦截请求的,在请求 ...

  7. live555源代码编译

    参考http://www.cnblogs.com/MikeZhang/archive/2013/04/24/live555Windows_20130424.html 环境:windowsxp + VS ...

  8. 将Excel生成实体类

    package com.excel.test; import java.util.List; public class createUtil { public static String append ...

  9. poj1680 最短路判环

    题意:有多个银行可以换钱,每个银行可以将特定的两种钱相互兑换,并且有自己的汇率,现在问是否可以将自己的钱通过银行兑换增加. 其实比较水,主要就是知道最短路问题里的负环可以通过bellman-fold或 ...

  10. 【转】db/dbm

    db,表示一个相对值.当计算A的功率相比于B大或小多少个dB时,可按公式10lg A/B计算.例如:A功率比B功率大一倍,那么10lg A/B = 10 lg 2 = 3dB,也就是说,A的功率比B的 ...