2016-06-30 15 views
1

У меня возникла проблема с моим скриптом perl с анализом аргументов командной строки. В основном, я бы хотел, чтобы perl аргументировал аргумент, предшествующий (em/en) -dash, а также hypen. Пожалуйста, обратите внимание на следующее выполнение команды:Perl - en/em dash в аргументах командной строки

my_spript.pl -firstParam someValue –secondParam someValue2 

Как вы можете видеть, firstParam с префиксом hypen и нет никаких проблем с Perl разбор его, но secondParam предваряется ан-тире и, к сожалению Perl не может распознать его как аргумент. Я использую GetOptions() для разбора аргументов:

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

Какой модуль вы используете? [Getopt :: Long] (http://p3rl.org/Getopt::Long)? – choroba

+0

@choroba, Да. Я использую Getopt :: Long – dejvid

+0

При всем уважении это сумасшедшее требование. – tripleee

ответ

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"; 
+0

прекрасно работает на OS-X, но, похоже, не работает в Windows. (версия perl: 5.14.2). У вас есть представление, что может быть неправильным? – dejvid

+1

В Windows терминальная кодировка, вероятно, не UTF-8. Укажите правильную кодировку. – choroba

+0

@dejvid: проверьте обновление. – choroba