-2

我正在接收某个进程的输出(如下@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
4

3 回答 3

7

我不确定您认为chomp应该做什么,但不是要添加空格?!

它也不会删除尾随空格。如果要删除尾随空格(包括换行符),请使用以下内容而不是chomp(@result_listosp)

s/\s+\z// for @result_listosp;

至于在元素之间添加空格,您可以使用

print(join(' ', @result_listosp), "\n");

甚至只是

print("@result_listosp\n");
于 2013-03-29T07:47:23.610 回答
4

该函数chomp仅删除行\n尾的换行符(在本例中)。

如果你想修剪(从末端删除空格),你可以这样做:

#!/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,则需要使用括号。

弗朗西斯科

于 2013-03-29T09:49:39.630 回答
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
于 2013-03-29T07:47:31.623 回答