펄에서 <> 연산자를 사용하여 eof에 도달하면 어떻게됩니까?새로 고침 라인 읽기 연산자 Perl
나는
while(<INP1>) {
}
과 선으로 INP1 라인을 읽고 있어요하지만 난이 읽기를 여러 번 할 필요가 나는 파일마다의 처음부터 시작해야합니다. 어떻게해야합니까? 펄에서 스트림을 새로 고치는 것과 같은 것이 있습니까?
미리 감사드립니다.
펄에서 <> 연산자를 사용하여 eof에 도달하면 어떻게됩니까?새로 고침 라인 읽기 연산자 Perl
나는
while(<INP1>) {
}
과 선으로 INP1 라인을 읽고 있어요하지만 난이 읽기를 여러 번 할 필요가 나는 파일마다의 처음부터 시작해야합니다. 어떻게해야합니까? 펄에서 스트림을 새로 고치는 것과 같은 것이 있습니까?
미리 감사드립니다.
INP1
이 (소켓 핸들이나 파이프 핸들이 아닌) 일반 파일 핸들에 연결되어있는 경우 seek
파일의 시작 부분으로 되돌아 갈 수 있습니다.
while(<INP1>) {
...
}
seek INP1, 0, 0;
# do it again
while (<INP1>) {
...
}
또 다른 옵션은 자주 당신이 원하는대로 그 배열을 통해 다음 루프를 배열 한 번에 전체 파일을로드하는 것입니다. 전체 파일이 메모리에 편안하게 들어가고 파일의 내용이 순회간에 변경되지 않는 경우이 방법이 좋습니다.
open INP1, '<', $the_file;
@INP1 = <INP1>;
close INP1;
foreach (@INP1) {
...
}
# do it again
foreach (@INP1) {
...
}
당신은 seek
처음부터 다시 할 수 있습니다 INP1 실제 파일 (하지 파이프 나 소켓) 인 경우
use Fcntl;
open INP1, ...
while (<INP1>) {
}
seek INP1, 0, SEEK_SET;
while (<INP1>) {
}
이는 제대로 작동합니다.
나는 확실히이 프로그램은 사용 strict','사용 경고'
@tchrist : 좋은 제안이긴하지만, 질문에 대답하지 않아서 질문에 답할 수 없으므로 답안에 포함시키지 않을 것입니다. –
@Adrian : 성공을 확인하지 않고 syscalls를 작성하는 것은 허용됩니다 어떤 상황입니까? – tchrist
가'autodie를 사용합니다' – tchrist
사용 어휘 범위 파일 핸들을 – planetp