我有一个代码,上面有一些这样的替代品:
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;
使用模板或类似的模块可能更容易、更灵活。