다른 답변은 while
루프의 명령문 수정 자 양식을 설명했습니다. 그러나 여기에는 다른 많은 마법이 있습니다. 특히이 스크립트는 Perl의 특수 변수 중 세 가지를 사용합니다. 이 중 두 개 ($_
및 $!
)는 매우 일반적입니다. 다른 하나 ($.
)는 비교적 일반적입니다. 그러나 그들은 모두 가치가 있습니다.
열려있는 파일 핸들에서 while <$fh>
을 실행하면 Perl은 파일을 EOF
에 도달 할 때까지 자동으로 실행합니다. 각 루프 내에서 현재 행은 아무 것도하지 않고 $_
으로 설정됩니다. 그래서이 둘은 동일합니다
while (<$fh>) { # something }
while (defined($_ = <$fh>)) { # something }
가 perldoc perlop
, I/O 사업자에 대한 섹션을 참조하십시오. (어떤 사람들은 도 마술 적이기 때문에 while (my $line = <$fh>)
을 대신 사용합니다.이것은 더 명확한 변수 이름 인 $_
대신 각 행에 대해 $line
을 제공하지만보다 많은 입력이 필요합니다. 각자 자신에게).
$!
은 시스템 오류 (설정되어있는 경우)의 값을 유지합니다. 이것을 사용하는 방법과시기에 대한 자세한 내용은 perldoc perlvar
, $OS_ERROR
에 관한 섹션을 참조하십시오.
$.
에는 회선 번호가 있습니다. perldoc perlvar
, $NR
섹션을 참조하십시오. 이 변수는 놀라 울 정도로 까다 롭습니다. 현재 읽고있는 파일의 줄 번호가 반드시 있어야하는 것은 아닙니다. 예 : 당신이 lines
으로 이것을 저장하고 perl lines file1 file2 file3
로 실행하면
#!/usr/bin/env perl
use strict;
use warnings;
while (<>) {
print "$ARGV: $.\n";
}
, 다음 펄은 바로 파일 1, 파일 2 및 파일 3을 통해 라인을 계산합니다. Perl은 파일을 읽는 것을 알고 있습니다 ($ ARGV에 있으며 파일 이름은 정확합니다). 은 각 파일의 끝에 행 번호를 자동으로 다시 설정하지 않습니다. 나는 마침내 내 (두꺼운) 해골을 마침내 이해할 때까지이 행동으로 두 번 이상 물었다. 개별 파일이 방법을 추적하기 위해 번호를 재설정 할 수 있습니다 : 당신은 또한 strict
및 warnings
프라그 마를 확인하고 open
의 새로운 세 가지 인수 형태를 살펴한다
#!/usr/bin/env perl
use strict;
use warnings;
while (<>) {
print "$ARGV: $.\n";
}
continue {
close ARGV if eof;
}
. 방금 "unknown (google)"이라는 메시지가 나타났습니다. 다시 말하면 결코 돌아 오지 않을 것입니다. 나는 적어도 내 타이핑 연습을해야 겠지.
몇 권인가? –
** '경고'**이 코드는 사용하지 마십시오. 잘못 작성되었습니다. –
아, 예, 파일 핸들로 무엇을하고 있는지 알지 못했습니다. 그건 사악 해. – chaos