将url存储在变量中的Perl问题

时间:2015-04-18 07:02:01

标签: perl url escaping

我对Perl比较陌生。我试图将URL存储在变量中。这是我的代码:

my $port = qx{/usr/bin/perl get_port.pl};
print $port;
my $url = "http://localhost:$port/cds/ws/CDS";
print "\n$url\n";

这给了我以下输出:

4578
/cds/ws/CDS

所以get_port.pl脚本正确地给了我端口但是URL没有正确存储。我相信斜杠/存在一些问题,但我不确定如何绕过它。我尝试用反斜杠转义它,我也试过qq{},但它一直给出相同的输出。

请告知。

perl get_port.pl | od -a

的输出

0000000 nl 4 5 7 8 nl 0000006

2 个答案:

答案 0 :(得分:1)

您的$url字符串出现了错误。问题几乎肯定是$port字符串包含回车符。大概你在使用Windows?

尝试使用此代码,它会在get_port.pl返回的值中提取它找到的第一个数字字符串,并丢弃其他所有内容。

my ($port) = qx{/usr/bin/perl get_port.pl} =~ /(\d+)/;
print $port, "\n";
my $url = "http://localhost:$port/cds/ws/CDS";
print $url, "\n";

答案 1 :(得分:0)

正如@Сухой27我想要指出的是,你可以在qx之外使用'/'以外的其他字符来简化语法,然后你不必逃避斜杠。

我还添加了一个默认端口8080,以防get_port.pl不存在。

这似乎运作正常。

#!/usr/bin/perl -w
# make 8080 the default port
my $port = qx{/usr/bin/perl get_port.pl} || 8080;
print $port;
my $url = "http://localhost:$port/cds/ws/CDS";
print "\n$url\n";

<强>输出

paul@ki6cq:~/SO$ ./so1.pl 
Can't open perl script "get_port.pl": No such file or directory
8080
http://localhost:8080/cds/ws/CDS