Я знаю, что $.
показывает номер строки, когда $/
установлено на "\n"
.
Я хотел эмулировать команду Unix tail
в Perl и распечатать последние 10 строк из файла, но $.
не сработало. Если файл содержит 14 строк, он начинается с 15 в следующем цикле.
#!/usr/bin/perl
use strict;
use warnings;
my $i;
open my $fh, '<', $ARGV[0] or die "unable to open file $ARGV[0] :$! \n";
do { local $.; $i = $. } while (<$fh>);
seek $fh, 0, 0;
if ($i > 10) {
$i = $i - 10;
print "$i \n";
while (<$fh>) {
#local $.;# tried doesn't work
#undef $.; #tried doesn't work
print "$. $_" if ($. > $i);
}
}
else {
print "$_" while (<$fh>);
}
close($fh);
Я хочу сбросить $.
, чтобы его можно было использовать в следующем цикле.
perl -nle 'push @tail, $_; shift @tail if @tail > 10; END {print foreach (@tail)}' input.txt
- person Dmitry Egorov   schedule 10.06.2015tail
в Perl 5: metacpan.org/source/ BDFOY/PerlPowerTools-1.006/bin/tail#L142 - person dolmen   schedule 10.06.2015