在Perl中“ [0]”是什么意思?

鳕鱼4

这段代码中的[0]在做什么:

select((select(LOG_FILE),$!=1)[0]);
布赖恩·德·福伊

更新:我十年前回答了!在Perl中“ select((select,$ | = 1)[0])”是做什么的?


您正在查看对列表的单个元素访问。括号中的表达式产生某种列表,然后[0]从列表中选择一项。

此代码段是设置每个文件句柄kinda-global变量的非常古老的习惯用法。我认为您可能是指$|(自动刷新设置)而不是$!

首先,请记住Perl具有“默认文件句柄”的概念。最初是标准输出,但是您可以更改它。那就是这样select做的。

接下来,意识到每个文件句柄都知道自己对各种事物的设置;这些由特殊变量表示,例如$|(请参见perlvar的“与文件句柄相关的变量”的部分)。当您更改这些变量时,它们将应用于当前的默认文件句柄。

因此,您在这个习惯用法中看到的是一个内部组件select,它可以更改默认文件句柄。您更改默认值,然后将其设置$|为所需的任何值。看起来有些奇怪,因为您有两个用逗号而不是用分号分隔的表达式,即use语句分隔符:

(select(LOG_FILE), $|=1)

从这个角度来看,成语希望得到结果select那是先前的默认文件句柄。为了得到那个,你想要那个列表中的第一项。那是在索引0中:

(select(LOG_FILE), $|=1)[0]

整个表达式的结果是先前要恢复的默认文件句柄。用外部做select

select((select(LOG_FILE), $|=1)[0]);

您可以使用中间变量来编写该代码:

my $previous = select LOG_FILE;
$| = 1;
select($previous);

如果您自己编写新内容,则可以对文件句柄使用标量变量,然后调用其autoflush方法:

open my $log_file_fh, '>', $log_filename or die ...;
$log_file_fh->autoflush(1);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章