Perl - 命令行参数中的 en / em 破折号
Perl - en / em dash in command line arguments
我的 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
)
如果您正在使用 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";
我的 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
)
如果您正在使用 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";