Вы указываете, что «Разделитель записей - это строка, начинающаяся с шаблона / ^ # matchee /».Это несколько усложняет разделение записей, поскольку $/
является специальной строкой, но не регулярным выражением .Вы не указали, использует ли ваш вывод тот же разделитель записей, но я так полагаю.Вот подход, который, кажется, работает.
#!/usr/bin/env perl
use strict;
use warnings;
sub take_and_pad_lines {
my ($str, $take, $pad) = @_;
my @lines = (split(/\n/, $str))[0..$take-1];
return join "\n", @lines, ('') x ($pad - $take);
}
{
$/ = "#matchee";
while (my $record = <> ) {
# because RS is really begins-with we must clean up first line
# and double check last record
unless (1 == $.) {
$record =~ s/\A.*\n//m;
last if eof() && $record eq '';
}
print take_and_pad_lines( $record, 40, 45 ), "\n";
print "$/\n" unless eof();
}
}