从任何类型的标量,我可以使用什么正则表达式来匹配它的前五行并丢弃其余的?
解决方法
奇怪的请求,但这应该这样做:
#!/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";
#!/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; 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;