2014-01-21 63 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