0

procmailrc テキスト ファイルを作成する perl プログラムを作成しています。

procmail が必要とする出力は次のようになります: (「|」で区切られた部分的な IP アドレス)

\(\[54\.245\.|\(\[54\.252\.|\(\[60\.177\.|

これが私のperlスクリプトです:

open (DEAD, "$dead");
@dead = <DEAD>;
foreach $line (@dead) { chomp $line; $line =~s /\./\\./g;
print FILE "\\(\\[$line\|\n"; }
close (DEAD);

これが私が得ている出力です:

|(\[54\.245\.
|(\[54\.252\.
|(\[60\.177\.

chomp が改行を削除しないのはなぜですか? まだ見知らぬ人、なぜ「|」なのか 最後ではなく、各行の先頭に表示されますか?

$line を単語に置き換えると、(print FILE "\(\[test\|"; }) 出力は、私が期待するように見えます。

\(\[test|\(\[test|\(\[test|\(\[test|

ここで何が欠けていますか?

そこで、chomp を使用しない回避策を見つけました: 答えはこちら: https://www.perlmonks.org/?node_id=504626

私の新しいコード:

open (DEAD, "$dead");
@dead = <DEAD>;
foreach $line (@junk) { 
$line =~ s/\r[\n]*//gm; $line =~ s/\./\\./g;  $line =~ s/\:/\\:/g;
print FILE "\\(\\[$line \|"; }
close (DEAD);

ヒントをくださった方々、ありがとうございました。

4

1 に答える 1