您可以在内存中打开文件句柄吗?
我不清楚内存中的部分,这是什么意思?
如果这意味着你可以使用计算机的内存,它不是已经这样工作了吗?
这意味着您可以使用文件句柄来写入和读取标量变量。
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
您可以直接打开文件句柄来标量变量。当您有一些必须像文件一样的东西时,它特别有用,但您不希望在磁盘上有一个。此示例取自perldoc:
close STDOUT;
open(STDOUT, ">", \$variable)
or die "Can't open STDOUT: $!";
它关闭 STDOUT,然后重新打开它附加到$variable
.