<p>在perl中,这种操作可以通过多种方式轻松实现,您可以随意选择一种您认为有利的方式</p>
<p>替代方法</p>
<pre><code>use strict;
use warnings;
use feature 'say';
my $filename = 'config.xml';
my $insert =
'<vhostMap>
<vhost>google</vhost>
<domain>google.com, www.google.com</domain>
</vhostMap>';
open my $fh, '<', $filename
or die "Couldn't open $filename: $!";
my $data = do{ local $/; <$fh> };
close $fh;
$data =~ s/((.*?\n){8})/${1}$insert\n/s;
open $fh, '>', $filename
or die "Couldn't open $filename: $!";
say $fh $data;
close $fh;
</code></pre>
<p>阵列切片法</p>
<pre><code>use strict;
use warnings;
use feature 'say';
my $filename = 'config.xml';
my $insert = '<vhostMap>
<vhost>google</vhost>
<domain>google.com, www.google.com</domain>
</vhostMap>';
open my $fh, '<', $filename
or die "Couldn't open $filename: $!";
my @lines = <$fh>;
close $fh;
open $fh, '>', $filename
or die "Couldn't open $filename: $!";
say $fh @lines[0..7],$insert,"\n",@lines[8..$#lines];
close $fh;
</code></pre>
<p>数组迭代法</p>
<pre><code>use strict;
use warnings;
use feature 'say';
my $filename = 'config.xml';
my $insert = '<vhostMap>
<vhost>google</vhost>
<domain>google.com, www.google.com</domain>
</vhostMap>';
open my $fh, '<', $filename
or die "Couldn't open $filename: $!";
my @lines = <$fh>;
close $fh;
open $fh, '>', $filename
or die "Couldn't open $filename: $!";
my $line_count = 0;
for (@lines) {
chomp;
$line_count++;
say $fh $_;
say $fh $insert if $line_count == 8;
}
close $fh;
</code></pre>
<p>输入</p>
<pre><code>line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10
line 11
line 12
</code></pre>
<p>输出</p>
<pre><code>line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
<vhostMap>
<vhost>google</vhost>
<domain>google.com, www.google.com</domain>
</vhostMap>
line 9
line 10
line 11
line 12
</code></pre>