为什么Perl选择不做我想做的事情?

时间:2013-03-29 07:34:53

标签: perl

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

3 个答案:

答案 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