2012-04-26 3 views
1

좋아요, 그래서 나는 파일을 여는 방법에 따라 perl에서 grep의 직관적 인 행동을 발견했습니다. 파일을 읽기 전용으로 열면 (<) 작동합니다. 읽기 - 쓰기 (+ <)를 열면 작동하지만, 추가 읽기를 열면 읽지 않습니다. (+ >>)Perl open() grep

이 방법이 효과적 일 수 있지만이 방법이 왜 효과가 있는지 궁금합니다. 누구든지 좋은 설명이 있습니까?

a 
b 
c 

과의 greptest.pl 파일 :

$ ./greptest.pl 
Found when opened read 
Found when opened write-read 
Not found when opened append-read 

내가 찾는를 기대했을 것이다 반면 : 그것은 다음 반환 실행

#!/usr/bin/perl 

use strict; 
use warnings; 

open(RFILE, '<', "test.txt") 
    or die "Read failed: $!"; 
if(grep /b/, <RFILE>) {print "Found when opened read\n";} 
    else {print "Not found when opened read\n";} 
close RFILE; 

open(RWFILE, '+<', "test.txt") 
    or die "Write-read failed: $!"; 
if(grep /b/, <RWFILE>) {print "Found when opened write-read\n";} 
    else {print "Not found when opened write-read\n";} 
close RWFILE; 

open(AFILE, '+>>', "test.txt") 
    or die "Append-read failed: $!"; 
if(grep /b/, <AFILE>) {print "Found when opened append-read\n";} 
    else {print "Not found when opened append-read\n";} 
close AFILE; 

test.txt 파일을 감안할 때

세 가지 테스트 모두에서.

+0

내 생각에 grep은 파일 포인터를 이후부터 검색하며, 파일 포인터를 추가하면 파일 포인터가 파일 끝으로 설정됩니다. – gcochard

+0

솔직한 추측. 하지만 왜'+ <'는'+ >>'와 다른가? 두 파일 모두 파일 끝에 추가됩니다. –

답변

6

파일 핸들은 추가 모드의 파일 끝에 있습니다.

+0

충분합니다. 파일 핸들이'+ <'모드를 위해 파일의 끝에 있지 않은 이유는 무엇입니까? –

+6

읽기 - 쓰기 기능을 사용하기 때문에 파일에서 읽는 것을 전제로합니다. 이를 수행하기 위해 포인터를 되 감을 필요는 없습니다. – gcochard

+0

print tell FILEHANDLE은 각각 귀하의 경우 rfile, rwfile, afile에 대해 파일 핸들의 위치가 6임을 알려줍니다. – dpp