ProgramingTip

Perl은 한 줄씩 읽습니다.

bestdevel 2020. 11. 30. 19:26
반응형

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

전원을 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                         ;

참고 URL : https://stackoverflow.com/questions/4505381/perl-read-line-by-line

반응형