如何只在Perl标量中保留前五行?

Tan*_*ami 4 regex perl scalar lines

从任何类型的标量,我可以使用什么正则表达式来匹配它的前五行并丢弃其余的?

Cha*_*ens 9

奇怪的请求,但这应该这样做:

#!/usr/bin/perl

use strict;
use warnings;

my $s = join '', map { "$_\n" } 1 .. 9;

my ($first) = $s =~ /^((?:.*\n){0,5})/;
my ($last) = $s =~ /((?:.*\n){0,5})$/;


print "first:\n${first}last:\n$last";
Run Code Online (Sandbox Code Playgroud)

一个更常见的解决方案是这样的:

#!/usr/bn/perl

use strict;
use warnings;

#fake a file for the example    
my $s = join '', map { "$_\n" } 1 .. 9;    
open my $fh, "<", \$s
    or die "could not open in memory file: $!";

my @first;
while (my $line = <$fh>) {
    push @first, $line;
    last if $. == 5;
}

#rewind the file just in case the file has fewer than 10 lines
seek $fh, 0, 0;

my @last;
while (my $line = <$fh>) {
    push @last, $line;
    #remove the earliest line if we have to many
    shift @last if @last == 6;
}

print "first:\n", @first, "last:\n", @last;
Run Code Online (Sandbox Code Playgroud)


Bri*_*sen 6

你为什么不用head它呢?