在 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

我想我可以为每个数组条目添加一个""或其他东西?

谢谢 问候

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

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;

使用模板或类似的模块可能更容易、更灵活。

最新更新