2011-08-22 56 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預期。

這是預期嗎?它可以工作嗎?我錯過了什麼嗎?

回答

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

如果你想模擬一個輸入文件,你可以使用'__DATA__'結構'while()' – TLP

+1

你應該檢查'sysread($ fh,$ buf,$ count)== $ count',** not **返回是否爲「undef」。很確定'sysread'不會回頭,在短時間內彌補差異,因此這是你自己的問題。 – tchrist

相關問題