13

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

我不清楚内存中的部分,这是什么意思?

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

4

2 回答 2

22

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

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
于 2013-08-21T20:46:32.873 回答
0

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

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

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

于 2013-08-21T20:44:09.433 回答