【发布时间】:2011-12-08 05:04:11
【问题描述】:
我的一个同事写了一个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 保留'\'? bash 中类似于 read -r 的内容。
【问题讨论】:
-
你在说什么
'\'? -
为什么首先使用反斜杠?正斜杠在键盘上更容易触及。
标签: perl escaping backslash getopt-long