如何在Perl中解析命令行开关?

aks*_*aks 4 perl command-line parsing arguments

为了在Perl中扩展我的"grep"模拟器,我增加了对一个-r交换机的支持,该交换机支持在子目录中进行递归搜索.现在命令行调用看起来像这样:

perl pgrep.pl -r <directory> <expression>
Run Code Online (Sandbox Code Playgroud)

两者-rdirectory参数都是可选的(目录默认为'.').截至目前,我只是检查第一个参数是否是-r,如果是,则设置适当的标志,并使用shift操作扫描其余两个参数.如果-r要出现在参数列表的末尾或者更糟糕的是 - 在目录名称和搜索表达式之间,这显然会是一个问题.

一个解决方法是简单地删除-r@ARGV数组中的项目,这样我就可以简单地移动剩余的参数,但是如果没有在我的奇怪位置获得'undef',我无法想办法阵列.欢迎您使用任何建议或不同的策略.

dsm*_*dsm 21

你应该使用GetOpt::Long.这将按照描述执行您需要的所有操作.