我有一些代码包含这样的替代品:
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'吗?
感谢 的问候,
答案 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或类似模块可能更容易,更灵活。