在变量中存储 url 的 Perl 问题

Perl issue with storing url in variable

我对 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

@Сухой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

您的 $url 字符串没有任何问题。问题几乎可以肯定是 $port 字符串包含 carriage-return 字符。大概你正在研究 Windows?

试试这个代码,它提取它在 get_port.pl 编辑的值 return 中找到的第一串数字,并丢弃其他所有内容。

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