我正在接收某个流程的输出(如下面的@result_listosp
所示)。当我尝试chomp输出很奇怪。我希望得到以下结果:
origin-server-pool-1 http_TestABC https_TestABC
代码:
use strict;
use warnings;
my @result_listosp = ( # From backticks
"origin-server-pool-1\n",
"http_TestABC \n",
"https_TestABC\n",
);
chomp @result_listosp;
输出:
origin-server-pool-1http_TestABC https_TestABC
答案 0 :(得分:7)
我不确定你认为chomp
应该做什么,但是不是要添加空格?!
它也不会删除尾随空格。如果要删除尾随空格(包括换行符),请使用以下代替chomp(@result_listosp)
:
s/\s+\z// for @result_listosp;
至于在元素之间添加空格,可以使用
print(join(' ', @result_listosp), "\n");
甚至只是
print("@result_listosp\n");
答案 1 :(得分:4)
函数chomp
仅删除行尾的换行符(在本例中为\n
)字符。
如果你想 trim (从末尾删除空格),你可以这样做:
#!/usr/bin/perl
use strict;
use warnings;
sub trim_elements {
for my $i (@_) {
$i =~ s/^\s+|\s+$//g;
}
}
my @result_listosp = ( # From backticks
"origin-server-pool-1\n",
"http_TestABC \n",
"https_TestABC\n",
);
trim_elements @result_listosp;
for my $i (@result_listosp) {
print $i;
}
如您所见,我没有使用括号。这只是因为在调用之前声明了sub。如果在代码后声明sub,则需要使用括号。
旧金山
答案 2 :(得分:1)
如果每行都有换行符,并且要删除它们,请使用chomp。如果要将字符串连接在一起,请使用join:
my @result_listosp = ( # From backticks
"origin-server-pool-1\n",
"http_TestABC \n",
"https_TestABC\n",
);
print join (" ", map { /^\s*(.*?)\s*$/ } @result_listosp), "\n";
<强>输出强>
origin-server-pool-1 http_TestABC https_TestABC