-2

いくつかのプロセスから出力を受け取っています (以下を@result_listosp参照)。出力をチョップしようとすると、奇妙になります。次の出力が必要です。

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;
}

ご覧のとおり、括弧を使用していません。これは、サブルーチンが呼び出しの前に宣言されているためにのみ機能します。コードの後に​​サブを宣言する場合は、括弧を使用する必要があります。

フランシスコ

于 2013-03-29T09:49:39.630 に答える
1

各行に改行があり、それらを削除したい場合は、chomp を使用します。間にスペースを入れて文字列を連結したい場合は、結合を使用します。

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 に答える