Getopt::Std模块的使用

上一篇 / 下一篇  2008-11-18 22:35:18 / 个人分类:perl

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP
Getopt::Std模块的功能:51Testing软件测试网tL f"u,cWx1KW
初始化perl命令行中所接受的参数.简化了命令行参数的解析51Testing软件测试网(Gmnm'p4S6Z
Getopt::Std模块的使用:
!NSW u H'^&B)js051Testing软件测试网*a:[7w2{tXG Nc!y
初始设置:  51Testing软件测试网 ON}] e)S+|Q:~
51Testing软件测试网 g f6?@2um0m2t
在程序中加入如下代码:51Testing软件测试网,sG`Q?
          use Getopt::Std;
aw"swR)v0               use vars qw($opt_d $opt_f $opt_p);
kg te\0               getopts('d:f:p');
Pk^s!NpnN,Pc0               (注意上两行的参数要对应)
p%o9O Ni{v ZZ051Testing软件测试网Q c1oQb
[ 解释一下"d:f:p",d和f后有冒号,表示-d,-f后面要跟参数。p后面没有冒号,表示-p后面不带参数。
8k R6p,j;MmF7K0而且-d,-f后所跟的参数分别赋给变量$opt_d和$opt_f。对于变量$opt_p,若命令行加了-p,则$opt_p=1,否则为0]51Testing软件测试网pOM8i6O"M2rr7l
51Testing软件测试网kHpS3N
举个例子就很清楚了:51Testing软件测试网 sp[.nx P#_w
vi file.pl51Testing软件测试网+A&l^Le0La

_8s,y#wE2j7Z.HB0添加如下代码:51Testing软件测试网:fSvFZB,e`w
use Getopt::Std;
(J#D0KYo9|P0C0use vars qw($opt_d $opt_f $opt_p);
2EL/t'dRh0getopts('d:f:p');51Testing软件测试网W:KMRS
51Testing软件测试网]5whf't'Bj
print "\$opt_d =>; $opt_d\n" if $opt_d;
,Hj3Bs_^'_wx Z0print "\$opt_f =>; $opt_f\n" if $opt_f;51Testing软件测试网2d0} _@ V#Q
print "\$opt_p =>; $opt_p\n" if $opt_p;51Testing软件测试网;P*C9ZrG K&P)yw[h

O0^'O bv4i UZ0然后在命令行中运行:51Testing软件测试网1`&LR:PJ&f
perl file.pl -d 20040412 -f louiskoochen -p51Testing软件测试网5npok7tF

4PM5@H_Y3U|)Q8Q0可得到下列形式的输出:51Testing软件测试网+t8v|:r1e"eY:R5J$c
$opt_d =>;200040412
Q2o U K?~0$opt_f =>;louiskoochen51Testing软件测试网#L#lw ZUVq

rhmV9[_,m0Parse::RecDescent 的快速教程51Testing软件测试网B'B+BL4Pk WF R_
Parse::RecDescent 是一个用于解析文本的模块。通过几个简单构造就可以用它完成几乎所有的解析任务。更高级的文法构造可能会让人望而生畏,不过在大多数用途中不需要这么高级的文法。

$L:MH F `7j8\E0Parse::RecDescent 是一个面向对象的模块。它围绕着文法创建解析器对象。文法(grammar)是一组以文本形式表示的规则。
"Fh8B!_(j'?n051Testing软件测试网o@2o!soKK{

Nt2Dn.HQ4k0使用 Parse::RecDescent 的简单用户界面51Testing软件测试网r.E3E4j/A'Pd+\/}/v7Z"a
该 脚本扩展了带开关的简单事件循环,将 Parse::RecDescent 用作解析引擎。该脚本最大好处是,不再必须执行匹配语句。而是由文法同时确定用户输入的格式和根据输入所要采取的操作。usage() 函数得到了很大的改善,因为不再需要处理两种独立调用方式。51Testing软件测试网4W${l9j9Z(tYa@8m

:of)o$DknN'k{U0请注意将命令行参数直接传递给解析引擎的方式。这意味着不再需要 Getopts::Std 模块,因为 Parse::RecDescent 模块能很好地做这件事。如果配置文件十分复杂,可以类似地改写 Parse::RecDescent 来解析它们(对于简单到较复杂的配置文件,AppConfig CPAN 模块可以很好地解析它们)。51Testing软件测试网?%cA"iE-R5R

51Testing软件测试网:S1H8V/fk({

bbSKj.U3C*xF0Parse::RecDescent:功能强大、易于使用和可修改的模块
R+mJ-D,G0Parse::RecDescent 的解析能力在于可无休止地修改它。这里可以看到,它们创建的 UI 解析引擎能够比自创的方法具有更显著的优势。所有同 Parse::RecDescent 一样功能强大的工具都存在速度问题。但在开发和测试上所节省的时间可以很好地平衡这一点。

$pB^.Y(q'k051Testing软件测试网5g3S"_`-Z,ej

Parse::RecDescent 大大简化了复杂的参数列表和对用户输入的解析。使用它可以很容易地接受命令的可替换版本,这样就具有了允许缩写和国际化等优点。51Testing软件测试网 Yf2O;Rz,h\7?$U

Zs$aa)|a'|\0实 际上,GUI 在后端通常有一个 Parse::RecDescent 解析器。如果您设计象这样的 GUI,则可以方便地将菜单命令转化成文法规则,尤其是因为菜单已经具有了树状结构,这可以确保没有重叠命令。可以在象这样的 GUI 中使用来自命令行或单独域(也许是“expert”模式)的用户输入,从实用性和定制的角度,这种做法甚至更好。51Testing软件测试网YS*z;iH%O a

EA\%p+c.J5m^ W:XU^0Parse::RecDescent 文法易于理解。不需懂得太多就可以理解扩展文法,在对付大项目时,这对您非常有帮助。可以在一个程序中用具有不同文法和用途的多个解析器。(正如我们所见,文法可以来自一个文件或来自一个内部的文本字符串。)51Testing软件测试网)G4O U&w rHGW

+ng,q jH6h0应 该始终将 Parse:RecDescent 作为一种功能强大的工具。在小程序中,由于其速度太慢难以使用,所以难以显示出其优越性。但对于较复杂的用户输入,其优越性会立即通过组织良好的代码和功 能而体现出来。将现有文法(命令行开关或自己开发的函数)移植到 Parse::RecDescent 非常容易,而编写新的文法甚至会更容易。每个 UI 构建人员都应发现这一功能强大的工具是有用的。

y{x"R \3~O051Testing软件测试网s%{\H3T y(`?4|o5e(B

使用 Parse::RecDescent 创建一个简单而有效的命令行用户界面51Testing软件测试网2n{.pi2~5U

TAG: perl

 

评分:0

我来说两句

Open Toolbar