在Perl中将标量作为文件打开

ih99xse1  于 2023-01-26  发布在  Perl
关注(0)|答案(1)|浏览(126)

根据PerlDoc,您可以将打开的文件定向到标量变量www.example.comhttps://perldoc.perl.org/functions/open#Opening-a-filehandle-into-an-in-memory-scalar
我试图确定是否可以将这种方法用于词法域中持久化的临时文件。我做了以下测试:

my $memfile;
my $filename=\$memfile;

open (OUT, ">", $filename);
print OUT "some data\n";
close (OUT);

我希望以后能够从标量中读取;例如:

open (IN, "<", $filename);
while (my $in=<IN>)
{
  print "$in\n";
}
close (IN);

这不起作用,所以我是疯了还是有一个正确的方法来做到这一点,所以它确实工作?

rm5edbpk

rm5edbpk1#

我们确实可以打开一个变量的文件句柄,并写入它;然后我们可以像使用其他变量一样使用它

open my $fhv, '>', \my $memfile or die $!;
say $fhv "hi";
close $fhv;

print $memfile;  # hi\n

一个 * 可以 * 打开变量引用的文件句柄来阅读,就像问题中那样,但这通常不是必需的(一个可能的用法是,如果我们想保持写 * 和读 *,这样它就可以在文件/变量之间改变,仅仅通过改变open语句)。
这也适用于另一“层”变量,就像问题中的那样,

my $memfile;
 my $file = \$memfile;
 open my $fhv, '>', $file or die $!;
 say $fhv "hi";
 close $fhv;

 print $memfile;

也可以再次打开$file的文件句柄进行阅读。
请注意,$fhv不是一个非常合适的文件句柄,一些文件句柄的使用将不起作用;参见X1 E0 F1 X的一个例子。

相关问题