perl版本之间的行为差​​异

时间:2014-01-21 13:43:46

标签: perl

我有以下脚本

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

此脚本在perl 5.8.8版本中正确执行,提供以下输出:

sample
script

然而,当在perl 5.14.2中执行时,它会出现以下错误:

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

perl版本之间有什么变化?

1 个答案:

答案 0 :(得分: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