Один из моих коллег написал 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.