Знам, че $.
показва номера на реда, когато $/
е зададено на "\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