Создание Perl Getopt :: Long сохраняет обратную косую черту (\) в строке - PullRequest
1 голос
/ 08 декабря 2011

Один из моих коллег написал Perl-скрипт, который запрашивает у пользователя домен / имя пользователя Windows, который, конечно, мы вводим в следующем формате domainname\username. Затем модуль Getopt: Long преобразует это в строку, пропуская символ '\' и делая строку неверной. Конечно, мы могли бы просто попросить всех наших пользователей ввести свой домен / комбинацию пользователей как domainname\\username, но я действительно не хочу быть виновным, «исправляя пользователя, а не программу». Мы также используем модуль, который мы сделали для этого, я назову OurCompany::ColdFusionAPI, так как он обращается к ColdFusion.

Наш код выглядит так:

#!/usr/bin/perl

use common::sense;
use Getopt::Long;

use OurCompany::ColdFusionAPI;

my ($server_ip, $username, $password, $need_help);

GetOptions (
    "ip|server-address=s" => \$server_ip,
    "user-name=s"         => \$username,
    "password=s"          => \$password,
    "h|help"              => \$need_help,
);
$username   ||= shift;
$password   ||= shift;
$server_ip  ||= shift;

if (!$server_ip or $need_help){
    print_help();
    exit 0;
}

my $print_hash = sub { my $a = shift; say "$_\t=> $a->{$_}" foreach keys %$a; };

...

Если я добавлю строку say $username, тогда она просто выдаст строку без '\'. Как я могу получить Perl, чтобы сохранить '\'? Что-то вроде read -r в bash.

Ответы [ 2 ]

11 голосов
/ 08 декабря 2011

Это делает ваша оболочка, а не Getopt :: Long. Вам нужно экранировать \, чтобы ваша оболочка интерпретировала его как буквальную обратную косую черту, а не как попытку избежать чего-либо.

9 голосов
/ 08 декабря 2011

Вы уверены, что это связано с Getopt :: Long?Скорее всего, ваша оболочка уже анализирует то, что вы печатаете, и работает с обратными слешами.

Почему бы не задать домен и имя пользователя отдельно?Это решило бы проблему несколько элегантно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...