Perl 스크립트에 몇 가지 표준 입력을 발행하면 (예 :Perl에서 표준 입력을받는 파일 핸들을 재설정하려면 어떻게해야합니까?
$ awk '{print $1"\t"$2}' foo.txt | myScript.pl
버그가 포함 된 스크립트가 있습니다. 그것은 표준 입력의 첫 줄을 읽 첫 번째 줄에서 무언가를 가져오고 만 이후 읽기에 표준 입력의 N을 통해 선 2 구문 분석 :
open (FH, "< $input") or die $?;
my $firstLine = <FH>; // reads first line
...
while (my $line = <FH>) {
// reads lines 2 through n
}
close (FH);
그래서 내가하려고하는이 스크립트에
seek
문을 추가 파일의 시작 부분에 파일 핸들을 다시 설정 :
use Fcntl qw(:seek);
...
open (FH, "< $input") or die $?;
my $firstLine = <FH>; // reads first line
seek (FH, 0, SEEK_SET) or die "error: could not reset file handle\n"; // should reset file handle
...
while (my $line = <FH>) {
// reads lines 1 through n (in theory)
}
close (FH);
이 seek
문을 추가하면 파일 입력을 위해 작동하지만 표준 입력하십시오. 스크립트 오류로 충돌 :
error: could not reset file handle
가 어떻게 올바르게, 스크립트의 시작 부분에 표준 입력의 첫 번째 줄을 읽은 파일 핸들을 다시 설정 한 후 표준 입력의 N을 통해 모든 라인 1을 읽을 수 있습니까?
while
루프가 있기 전에 첫 번째 줄을 저장하고 처리하는 특별한 경우를 작성할 수 있다고 생각합니다.하지만 표준 입력과 파일 입력을 모두 처리 할 수있는이 문제를 해결할 수있는 더 깨끗한 솔루션이 필요합니다.
물론! 나는 do-while에 대해 완전히 잊었다. 매우 우아합니다. 고마워요. –
다음/마지막에는 do {}가 블록으로 표시되지 않는다는 것을 기억하십시오. 표준 해결책에 대해서는 http://perldoc.perl.org/perlsyn.html#Statement- Modifiers를 참조하십시오. – ysth