2014-01-21 61 views
0

之間,我有以下腳本差異的行爲的perl版本

#!/usr/bin/perl -w 
print "sample\n"; 
syswrite STDIN, "script"; 
my $input = <STDIN>; 
print "$input"; 

此腳本在Perl正確執行5.8.8版本讓下面的輸出。 2它給出了以下錯誤:

Filehandle STDIN opened only for input at ./sample.pl line 5. 

perl versi項?

+8

有觀點認爲,5.8 .8允許寫入標準輸入是「正確的」執行,讓我覺得很有趣。無論如何'perldoc perldelta'會給你一個當前版本和前一個版本之間的變化列表。 – tjd

+0

我沒有檢查perldoc perldelta。但它沒有提到有關STDIN或寫入STDIN的任何內容。任何其他指針? – Sunil

+2

您應該知道每個perldelta只代表單個版本和前一個版本之間的變化。對於完整的故事,你需要閱讀'perl589delta','perl5100delta',perl5101delta' ....獲得舒適。 – tjd

回答

2

假設你要複製5.8.8的行爲。我不知道感覺多少讓這樣做,但你可以創建一個Perl讀寫手柄連接到相同的文件描述符如下:

$ perl -e' 
    open(my $fh, "+>&=", 0) or die $!; 
    print($fh "foo\n") or die $!; 
' >/dev/null 
foo 

$ perl -e' 
    { 
     open(my $fh, "+>&=", 0) or die $!; 
     close(STDIN); 
     open(STDIN, "+>&=", $fh) or die $!; 
    } 
    print(STDIN "foo\n") or die $!; 
' >/dev/null 
foo 
+0

請給我運行第一個片段的確切輸出。 – ikegami

+0

它的作品!打開(我的$ fh,「+>&=」,0)是否有用。非常感謝 :) – Sunil