【问题标题】:How to refer GetOptions of special character?如何引用特殊字符的GetOptions?
【发布时间】:2013-10-24 16:01:25
【问题描述】:

我在我的 Perl 代码中使用GetOptions 作为开关。我有一个需要用特殊字符分隔的数组。目前,我可以编写以下代码。

&GetOptions('sep:i');
if ($opt_sep) {
    $sep = "\.";
} else {
    $sep = "\/";
}

当我尝试-sep 1 时,我的输出将是Flower.Red.Small。如果没有此语句或 -sep 0 ,我的输出将是 Flower/Red/Small。知道如何准确引用用户定义的任何特殊字符来分隔我的输出语句吗?分隔符可以是以下任何字符:

# @ ^ * & % ; -

【问题讨论】:

  • 与您的主要问题无关,但最好通过my %opts=(sep=>"\/"); &GetOptions (\%opt, 'sep:i'); 提供具有默认值的选项,然后在其余代码中简单地使用$opt{sep}
  • 还有一个建议:您不需要在子例程调用的开头使用 &。你可以写 GetOptions(...)
  • @DVK ,我指的是整数对吗?如果我分配sep:i,特殊字符无效?
  • @annel - 当然。 “复制/粘贴被认为有害”。接得好。 sep:s.

标签: perl special-characters getopt


【解决方案1】:

您是否要求以下内容?

my @fields = split /\Q$opt_sep/, $str;

【讨论】:

    【解决方案2】:

    您可以使用s(字符串)代替i(整数)。参考Getopt::Long

    use warnings;
    use strict;
    use Getopt::Long qw(GetOptions);
    
    my %opt = (sep => '/');
    GetOptions(\%opt, 'sep=s');
    
    my @stuff = qw(Flower Red Small);
    print join($opt{sep}, @stuff), "\n";
    
    __END__
    
    script.pl -sep /
    Flower/Red/Small
    
    script.pl -sep .
    Flower.Red.Small
    
    script.pl -sep @
    Flower@Red@Small
    

    【讨论】:

    • 不知何故我得到了 sep 的未知选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2011-10-24
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多