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);
579   5  

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

вы должны использовать ++$counter,не$++counter, поэтому он не работает..

в 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

    Ничего не найдено.