2011-08-22 5 views
4

이, 불행하게도 작동하지 않습니다 예상대로perl : 메모리 내 파일 핸들의 sysread?

my $input = "this is a test"; 
open(my $fh, "<", \$input); 
my $n = sysread($fh, $buf, 4); # want $n == 4, $buf eq 'this' 

read 작품 sysread 교체.

예상 되나요? 일할 수 있을까요? 내가 놓친 게 있니?

답변

5

sysread를 수행 한 후에 변수 $! "잘못된 파일 설명자"가 포함되어 있습니까? 그런 다음 72428 버그가 발생했을 수 있습니다. "sysread가 스칼라에 대한 파일 핸들에서 작동하지 않습니다."(https://rt.perl.org/rt3/Public/Bug/Display.html?id=72428)

+0

참고에 감사드립니다! – ErikR

1

그러나이 작업을 수행하는 이유는 확실하지 않습니다.

my $input = "this is a test"; 
open(my $fh,'-|',"echo $a"); # open a pipe instead and echo the string 
my $n = sysread($fh,$buf,4) or warn $!; 

실패한 sysread는 $!을 설정하므로 오류를 확인할 수 있습니다.

+0

스칼라에 파일 핸들을 사용하는 테스트에서이 문제가 발생했습니다. 실제 파일을 만드는 데 어려움이 있습니다. 위의 RT 티켓이 말한 것처럼, 이후로이 파일이'sysread'를 사용하는 모듈에 파일 핸들을 전달하면 일반적으로 좋을 것입니다. – ErikR

+0

입력 파일을 시뮬레이트하고 싶다면'while ()' – TLP

+1

으로'__DATA__' 구문을 사용할 수 있습니다.'sysread ($ fh, $ buf, $ count) == $ count'를 체크해야합니다. ** 반환이'undef'인지 여부. 확실히'sysread'는 되돌아 가서 짧은 읽기에서 당신과의 차이를 만들어 내지 않을 것이므로, 그것은 당신이 처리해야 할 자신의 문제입니다. – tchrist