【问题标题】:What is the correct syntax to specify optional parameters?指定可选参数的正确语法是什么?
【发布时间】:2010-11-10 08:11:33
【问题描述】:

我有一个可以调用的 Perl 脚本

perl mysrc.pl -a=3 -b=4 -c=6

或作为

perl mysrc.pl -t=15

基本上,(为t 提供值)或(为所有abc 提供值)。必须指定至少一组值。

上面的语法怎么说?

perl mysrc.pl
     [-a=<value of a>]
     [-b=<value of b>]
     [-c=<value of c>]
     [-t=<value of t>]

意味着所有参数都是可选的,但情况并非如此。编写mysrc.pl 语法的正确方法是什么?

【问题讨论】:

    标签: perl syntax


    【解决方案1】:

    两个选项:要么使用“|”作为“或”符号和非方括号进行分组以避免“可选”上下文,或在多行上列出竞争用法

    perl mysrc.pl {-a=<value of a> -b=<value of b> -c=<value of c>|-t=<value of t>}
    
    perl mysrc.pl UseCaseOneOptions|UseCaseTwoOptions
         UseCaseOneOptions: -a=<value of a> -b=<value of b> -c=<value of c>
         UseCaseTwoOptions: -t=<value of t>
    

    对于非常复杂的选项集(想想 CVS),做 CVS 所做的事情(目前没有 xterm,所以下面是记忆中的粗略近似)——也就是说,通用的“帮助”消息只列出了所有可能的用例,并且要获得有关每个用例的选项集的帮助,请发出每个用例的帮助命令。

    $ cvs --help
      Usage: cvs <command> <per-command-options>
      Please type "cvs command --help" to get help on specific command's options
      Commands are: 
          cvs add
          cvs commmit
          cvs remove
          ...
    
    $ cvs checkout --help
      Usage: cvs checkout [-p] [-A] [-m message] [-M message_file] file_path
          -m message:          check-in comment
          -M file:             read check-in comment from this file
          -p:                  non-sticky checkout. Print the file to STDOUT.
    
    $ cvs diff --help
      Usage: cvs diff [-r VER1] [-r VER2] [-w] file_path
           -w:                 Ignore whitespace
    

    【讨论】:

      【解决方案2】:

      我可能会使用:

      mycmd [ -t=tval | -a=aval -b=bval -c=cval ] ...
      

      '...' 代表任何其他选项,或文件名,或什么都没有。如果其中一组是强制性的,我可能会使用大括号“{}”而不是方括号“[]”。方括号通常表示“可选”。

      【讨论】:

        【解决方案3】:

        你的意思只是帮助文本?在这种情况下,您可以执行 Subversion 所做的操作,例如:

        $ svn help merge
        merge: Apply the differences between two sources to a working copy path.
        usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
               2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
               3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]
        

        【讨论】:

          猜你喜欢
          • 2015-03-01
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-24
          • 2012-06-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多