Вы используете строки START
в качестве разделителей, поэтому вам нужно немного потанцевать с Perl $/
, который является разделителем записи .
#! /usr/bin/perl
use warnings;
use strict;
sub usage { "Usage: $0 input output ..\n" }
die usage unless @ARGV >= 1;
my $input = shift;
my $pid = open my $out, "|-";
die "$0: fork: $!" unless defined $pid;
if ($pid == 0) { # child
if (@ARGV) {
open STDOUT, ">", "/dev/null" or warn "$0: open: $!";
}
exec "tee", @ARGV or die "$0: exec: $!";
}
$/ = "START\n";
open my $in, "<", $input or die "$0: open: $!";
my $i = 1;
while (<$in>) {
chomp;
next unless /\S/;
print $out "$i. $_\n";
++$i;
}
Если в командной строке не указаны выходные данные, приведенный выше код отправляет записи в стандартный вывод.В противном случае он разветвляет их на все выходы, которых может быть произвольно много.