Perl - 命令行参数中的/ em破折号

时间:2016-06-30 08:17:09

标签: perl parsing arguments args hyphen

我的perl脚本遇到问题,解析命令行参数。主要是,我喜欢用perl解析前面的参数(em / en)-dash以及hypen。 请考虑以下命令执行:

my_spript.pl -firstParam someValue –secondParam someValue2

正如您所看到的,firstParam以hypen为前缀,perl解析它没有问题,但是secondParam以en-dash为前缀,不幸的是Perl无法将其识别为参数。 我正在使用GetOptions()来解析参数:

GetOptions(
    "firstParam" => \$firstParam,
    "secondParam" => \$secondParam
)

1 个答案:

答案 0 :(得分:3)

如果您使用Getopt::Long,则可以在将参数提供给GetOptions之前对其进行预处理:

#! /usr/bin/perl
use warnings;
use strict;

use Getopt::Long;

s/^\xe2\x80\x93/-/ for @ARGV;

GetOptions('firstParam:s'  => \ my $first_param,
           'secondParam:s' => \ my $second_param);
print "$first_param, $second_param\n";

首先解码参数可能更清晰:

use Encode;

$_ = decode('UTF-8', $_), s/^\N{U+2013}/-/ for @ARGV;

要使用不同的区域设置,请使用Encode::Locale

#! /usr/bin/perl
use warnings;
use strict;

use Encode::Locale;
use Encode;
use Getopt::Long;

$_ = decode(locale => $_), s/^\N{U+2013}/-/ for @ARGV;

GetOptions('firstParam:s'  => \ my $first_param,
           'secondParam:s' => \ my $second_param);
print "$first_param, $second_param\n";