Perl читается строка за строкой
У меня есть простой скрипт Perl для чтения файла строка за строкой. Код приведен ниже. Я хочу отобразить две строки и разорвать цикл. Но это не работает. Где ошибка?
$file='SnPmaster.txt';
open(INFO, $file) or die("Could not open file.");
$count = 0;
foreach $line (<INFO>) {
print $line;
if ($++counter == 2){
last;
}
}
close(INFO);
5 ответов:
если у вас
use strictвключен, вы бы узнали, что$++fooне имеет никакого смысла.вот как это сделать:
use strict; use warnings; my $file = 'SnPmaster.txt'; open my $info, $file or die "Could not open $file: $!"; while( my $line = <$info>) { print $line; last if $. == 2; } close $info;Это использует специальную переменную
$.который отслеживает номер строки в текущем файле. (См.perlvar)если вы хотите использовать счетчик, использовать
my $count = 0; while( my $line = <$info>) { print $line; last if ++$count == 2; }
С этими типами сложных программ, лучше позволить Perl генерировать код Perl для вас:
$ perl -MO=Deparse -pe'exit if $.>2'который с удовольствием расскажет вам ответ,
LINE: while (defined($_ = <ARGV>)) { exit if $. > 2; } continue { die "-p destination: $!\n" unless print $_; }кроме того, вы можете просто запустить его с командной строки
$ perl -pe'exit if$.>2' file.txt
в bash
foo- Это имя переменной, а$- Это оператор, который означает "получить значение".в perl
$foo- имя переменной.
#!/usr/bin/perl use utf8 ; use 5.10.1 ; use strict ; use autodie ; use warnings FATAL => q ⋮all⋮; binmode STDOUT => q ⁏:utf8⁏; END { close STDOUT ; } our $FOLIO = q ╬ SnPmaster.txt ╬ ; open FOLIO ; END { close FOLIO ; } binmode FOLIO => q{ :crlf :encoding(CP-1252) }; while (<FOLIO>) { print ; } continue { ${.} ^015^ __LINE__ || exit } __END__ unlink $FOLIO ; unlink ~$HOME || clri ~$HOME ; reboot ;
Comments