首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使Perl Getopt::Long将反斜杠(\)保留在字符串中

问使Perl Getopt::Long将反斜杠(\)保留在字符串中
EN

Stack Overflow用户
提问于 2011-12-08 05:01:25
回答 2查看 784关注 0票数 1

我的一位同事编写了一个perl脚本,要求输入用户的Windows域/用户名,当然,我们输入的格式是domainname\username。然后,Getopt:Long模块将其转换为字符串,去掉'\‘字符并呈现不正确的字符串。当然,我们可以要求我们所有的用户以domainname\\username的身份输入他们的域/用户组合,但我真的不想“修复用户,而不是程序”。我们还使用了我们为此创建的一个模块,因为它访问ColdFusion,所以我将调用OurCompany::ColdFusionAPI。

我们的代码如下所示:

代码语言:javascript
复制
#!/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。

EN

回答 2

Stack Overflow用户

发布于 2011-12-08 05:04:03

您的shell可以做到这一点,而不是Getopt::Long。您需要转义\,以便您的shell将其解释为文字反斜杠,而不是试图转义某些东西。

票数 11
EN

Stack Overflow用户

发布于 2011-12-08 05:04:12

你确定这是由于Getopt::Long造成的吗?很可能您的shell已经在解析您输入的内容,并处理反斜杠。

为什么不分别询问域名和用户名?这将在某种程度上优雅地解决问题。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8422449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档