什么是;[0]”;用Perl是什么意思?

什么是;[0]”;用Perl是什么意思?,perl,Perl,[0]在此代码中执行什么操作: select((select(LOG_FILE),$!=1)[0]); (LIST1)[LIST2]是一个列表片段。在列表上下文中,它计算为LIST2指定的LIST1元素 在这种情况下,它返回选择的结果 应该是 select((select(LOG_FILE),$|=1)[0]); 后者可以自动刷新日志文件文件句柄。它可以写得更清楚,如下所示: use IO::Handle (); # Only needed in older versions

[0]在此代码中执行什么操作:

select((select(LOG_FILE),$!=1)[0]);
(LIST1)[LIST2]
是一个列表片段。在列表上下文中,它计算为
LIST2
指定的
LIST1
元素

在这种情况下,它返回
选择的结果


应该是

select((select(LOG_FILE),$|=1)[0]);
后者可以自动刷新
日志文件
文件句柄。它可以写得更清楚,如下所示:

use IO::Handle ();       # Only needed in older versions of Perl.
LOG_FILE->autoflush(1);

顺便说一下,你不应该使用这样的全局变量。而不是

open LOG_FILE, ...
你应该使用

open my $LOG_FILE, ...
(LIST1)[LIST2]
是一个列表片段。在列表上下文中,它计算为
LIST2
指定的
LIST1
元素

在这种情况下,它返回
选择的结果


应该是

select((select(LOG_FILE),$|=1)[0]);
后者可以自动刷新
日志文件
文件句柄。它可以写得更清楚,如下所示:

use IO::Handle ();       # Only needed in older versions of Perl.
LOG_FILE->autoflush(1);

顺便说一下,你不应该使用这样的全局变量。而不是

open LOG_FILE, ...
你应该使用

open my $LOG_FILE, ...

更新:我十年前就回答了这个问题


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

这段代码是一个非常古老的习惯用法,用来设置一个类似于全局变量的perfilehandle。我想你可能是指
$|
(自动刷新设置)而不是
$

首先,请记住Perl有“默认文件句柄”的概念。一开始是标准输出,但您可以更改它。这就是
选择的功能

接下来,认识到每个文件句柄都知道它自己的各种设置;这些由特殊变量表示,如
$|
(请参阅)。更改这些变量时,它们将应用于当前默认文件句柄

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

(select(LOG_FILE), $|=1)
因此,习惯用法希望得到
select
的结果;这是以前的默认文件句柄。要得到它,您需要列表中的第一项。这在索引0中:

(select(LOG_FILE), $|=1)[0]
整个表达式的结果是上一个默认文件句柄,您现在要还原它。使用外部
选择

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);

更新:我十年前就回答了这个问题


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

这段代码是一个非常古老的习惯用法,用来设置一个类似于全局变量的perfilehandle。我想你可能是指
$|
(自动刷新设置)而不是
$

首先,请记住Perl有“默认文件句柄”的概念。一开始是标准输出,但您可以更改它。这就是
选择的功能

接下来,认识到每个文件句柄都知道它自己的各种设置;这些由特殊变量表示,如
$|
(请参阅)。更改这些变量时,它们将应用于当前默认文件句柄

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

(select(LOG_FILE), $|=1)
因此,习惯用法希望得到
select
的结果;这是以前的默认文件句柄。要得到它,您需要列表中的第一项。这在索引0中:

(select(LOG_FILE), $|=1)[0]
整个表达式的结果是上一个默认文件句柄,您现在要还原它。使用外部
选择

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);

所以OP的意思是写
$|
而不是
$?@夹钳,是的。修正了,所以OP的意思是写
$|
,而不是写
$?@夹钳,是的。固定的