我的一位同事编写了一个perl脚本,要求输入用户的Windows域/用户名,当然,我们输入的格式是domainname\username。然后,Getopt:Long模块将其转换为字符串,去掉'\‘字符并呈现不正确的字符串。当然,我们可以要求我们所有的用户以domainname\\username的身份输入他们的域/用户组合,但我真的不想“修复用户,而不是程序”。我们还使用了我们为此创建的一个模块,因为它访问ColdFusion,所以我将调用OurCompany::ColdFusionAPI。
我们的代码如下所示:
#!/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。
发布于 2011-12-08 05:04:03
您的shell可以做到这一点,而不是Getopt::Long。您需要转义\,以便您的shell将其解释为文字反斜杠,而不是试图转义某些东西。
发布于 2011-12-08 05:04:12
你确定这是由于Getopt::Long造成的吗?很可能您的shell已经在解析您输入的内容,并处理反斜杠。
为什么不分别询问域名和用户名?这将在某种程度上优雅地解决问题。
https://stackoverflow.com/questions/8422449
复制相似问题