open(STDOUT,'>:scalar',\ $ stdout)如何在Perl中运行?

时间:2011-09-21 07:51:35

标签: perl

>:scalar是什么意思?

以前从未见过这种代码..

2 个答案:

答案 0 :(得分:9)

特定的“>:THING”语法告诉Perl IO系统使用THING指定的层。看一下PerlIO documentation for'layer'。常见的图层是'raw'和'utf8'。

在这种情况下,这允许您使用$ stdout作为内存文件,该文件最终应包含发送到STDOUT的任何内容。更一般地说,语法允许您打开内存中的文件,然后将文件句柄发送到通常写入文件的其他函数,以便您可以收集它们的输出(或提供它们的输入)。

您也可以通过打开一个标量引用的“文件”来获得相同的结果:

open my $fh, ">:scalar",  \$scalar or die;
open my $fh, ">",  \$scalar or die;

它由PerlIO提供,由PerlIO::scalar实现,但您不必“使用”该模块来访问该功能。

答案 1 :(得分:3)

Perl使用layered IO system。在链的底部,可以找到一个处理访问媒体的图层。 scalar是IO系统层,用于处理标量而不是文件的读取和写入。说

open(my $fh, '>:scalar', \$scalar)
标量句柄的

相当于说

open(my $fh, '>:unix', $file_name)

用于OS句柄。它完全是多余的,因为Perl已经知道它是标量句柄而不是操作系统句柄。