在perl中使用数组内容替换中添加换行符

时间:2018-01-26 13:42:15

标签: perl

我有一些代码包含这样的替代品:

  foreach (@mail_template) {
     s/%appname%/$appl/g;
     s/%envir%/$env/g;
     s/%status%/$final_status/g;
     s/%date%/$date/g;
     s/%from%/$from/g;
     s/%to%/$to/g;
     s/%filename%/$main::log/g;
     s/%checklist%/@checklist_items/g;
     s/%logs%/@error_logs/g;
     print TMP "$_";
  }

然而,它看起来像用以下数组替换:

s/%checklist%/@checklist_items/g;

粘贴数组的所有内容,没有任何换行符

在最终文件中,我有类似的内容:

array_entry1 array_entry2 array_entry3 array_entry N

全部在同一条线上(这是正常的)。

我的问题是:我如何获得相同的行为,但每次输入后都添加了换行符?

我希望替换代替这样的东西:

array_entry1
array_entry2
array_entry3
array_entryN

我想我可以为每个数组条目添加一个'\ n'吗?

感谢 的问候,

1 个答案:

答案 0 :(得分:3)

您可以将值存储到标量变量并改为使用它:

my $checklist = join "\n", @checklist_items;
s/%checklist%/$checklist/g;

join不会为最后一项添加换行符,因此您需要在需要时手动添加换行符。

请注意,使用替换表可能更容易维护:

my %replace = ( appname   => $appl,
                envir     => $env,
                status    => $final_status,
                checklist => join("\n", @checklist_items),
                ... );

s/%(\w+)%/$replace{$1}/g for @mail_template;

使用Template或类似模块可能更容易,更灵活。