在内存中打开文件意味着什么?

时间:2013-08-21 20:37:08

标签: perl

您可以在内存中打开文件句柄吗?

内存部分对我来说不清楚,这是什么意思?

如果这意味着您可以使用计算机的内存,那么它是不是已经像那样工作了?

2 个答案:

答案 0 :(得分:20)

这意味着您可以使用文件句柄来写入和读取标量变量。

my $var = "";
open my $fh, '>', \$var;
print $fh "asdf";
close $fh;
print $var;          # asdf

最终,这只是另一种方法

$var .= "asdf"

但是有些上下文比使用字符串操作范例更方便或更适合使用文件句柄范例。

例如,从这段代码开始:

open my $fh, '>', $logfile;
...
print $fh $some_message_to_be_logged;
... 500 more print $fh statements ...
close $fh;

但你知道吗?现在我宁愿在标量变量中记录我的日志消息,也许我可以搜索它们,在它们写入磁盘之前对它们进行操作等等。我可以将所有print语句更改为

$logvar .= $some_message_to_be_logged

但在这种情况下,只更改open语句会更方便。

open my $fh, '>', \$logvar

答案 1 :(得分:0)

您可以直接将Filehandles打开到标量变量。当你有一些必须像文件一样的东西,但你不想在磁盘上的一个时,它特别有用。此示例取自perldoc

close STDOUT;
open(STDOUT, ">", \$variable)
or die "Can't open STDOUT: $!";

关闭STDOUT,然后重新打开它附加到$variable