Вы можете использовать массив в качестве буфера печати.
my @array;
while (<DATA>) {
push @array, $_;
shift @array if @array > 4;
print @array if /script/;
}
__DATA__
1 I am here
2 to work in
3 Perl for writing
4 a script for
5 myself
Различное использование:
Если вы намереваетесь использовать это как отдельное устройство, вы можете вместо этого использовать grep
:
grep -B3 script xx.txt
Или perl one-liner, если grep
не вариант (например, вы в Windows):
perl -nwe 'push @a, $_; shift @a if @a > 4; print @a if /script/' xx.txt
Если это внутри скрипта, вам нужно только указать свой собственный дескриптор файла:
my @array;
open my $fh, '<', "xx.txt" or die $!
while (<$fh>) {
push @array, $_;
shift @array if @array > 4;
print @array if /script/;
}