perl:sysread在内存中的文件句柄上?
不幸的是,这不起作用:perl:sysread在内存中的文件句柄上?,perl,Perl,不幸的是,这不起作用: my $input = "this is a test"; open(my $fh, "<", \$input); my $n = sysread($fh, $buf, 4); # want $n == 4, $buf eq 'this' my$input=“这是一个测试”; open(我的$fh,“这是有效的,但是,我不太清楚为什么或者你是否真的想这样做 my $input = "this is a test"; open(my $fh,'-|',"echo
my $input = "this is a test";
open(my $fh, "<", \$input);
my $n = sysread($fh, $buf, 4); # want $n == 4, $buf eq 'this'
my$input=“这是一个测试”;
open(我的$fh,“这是有效的,但是,我不太清楚为什么或者你是否真的想这样做
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设置$!
,以便您可以检查错误。在sysread之后,变量$!是否包含“错误的文件描述符”?那么您可能遇到了错误72428“sysread不适用于标量的文件句柄”()我在使用标量文件句柄的测试中遇到了这种情况,因为我不想麻烦地创建一个真正的文件。一般来说,如果从那时起这样做就很好了,正如上面的RT票证所说,将文件句柄传递给任何使用sysread
的模块。如果你想模拟一个输入文件,你可以将\uuu DATA\uu
构造与while()一起使用
您应该检查sysread($fh,$buf,$count)==$count
,而不是返回值是否为undef
。非常确定sysread
不会返回并在短时间内为您弥补差异,因此这是您自己要处理的问题。这是一个非常好的解决方法。但是有一个shell命令行大小限制(在我的系统上为128K),因此它不能在此表单中用于大型或任意大小的数据。