代码之家  ›  专栏  ›  技术社区  ›  aks

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

  •  4
  • aks  · 技术社区  · 15 年前

    为了延长我的生命 "grep" emulator 在Perl中,我添加了对 -r

    perl pgrep.pl -r <directory> <expression>
    

    二者都 -r directory 参数是可选的(目录默认为“.”)。现在我只是检查第一个参数是否正确 -r -r

    一种解决方法是简单地删除 -r 来自@ARGV数组的项,以便 转移 -在剩下的参数中,但我无法找到一种方法,在数组中的奇数位置不获得“undef”。欢迎您提出任何建议或使用不同的策略。

    4 回复  |  直到 7 年前
        1
  •  21
  •   dsm    15 年前

    你应该使用 GetOpt::Long . 这将完成所描述的所有需要的操作。

        2
  •  4
  •   Brian Carlton    15 年前
    use Getopt::Std;
    
    our $opt_r; # will be set to its value if used.
    getopts('r:'); # -r has an option.
    
        3
  •  1
  •   J.J.    15 年前
    • 为您的目录添加a-d开关。我的意见是,“如果命令是可选的,它应该有一个开关来启用它。”
    • 此外,在读取开关(及其参数)时,我会将其从数组中删除,只留下我的“表达式”。如果该数组中有多个元素,则表示有人写错了。
        4
  •  0
  •   brian d foy    15 年前

    我在中关于“配置”的章节 Mastering Perl 从perl的 -s 到常用的模块来处理这些问题。举个例子,我可能从 Getopt::Std 并转化为 Getopt::Long