我有以下脚本
#!/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版本之间有什么变化?
答案 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