gpt4 book ai didi

perl - Perl 的 $| 的作用域是什么(OUTPUT_AUTOFLUSH) 设置?

转载 作者:行者123 更新时间:2023-12-04 09:58:05 26 4
gpt4 key购买 nike

我在安装了 Perl 5.8.8 的旧 CentOS 5.6 服务器上运行了一个 Perl 脚本。不幸的是,我无法升级此服务器上运行的操作系统或 Perl 版本。

当我从命令提示符运行这个脚本时,尽管有 $| = 1;脚本顶部的语句(在全局范围内),它似乎仍然将输出缓冲到控制台(通过 ssh session )。

写入日志文件和 STDOUT由一个函数执行,例如:

#!/usr/bin/perl
$| = 1;

&writelog("Started...");

# Do work with lots of writelog'ing

&writelog("...Done.");

exit(0);

sub writelog {

# This is greatly simplified for the purpose of this question

my ($logentry) = @_;
my $logfile = "/var/log/thelog.log";
my $logline = "$logentry\n";
print $logline;
open (LOGFILE, ">>$logfile");
print LOGFILE, "$logline";
close (LOGFILE);
}
$|的值是否为只影响当前范围内的输出,即在这种情况下脚本的全局范围?或者,在上面的例子中,它也应该立即刷新到 STDOUT/ LOGFILEprint writelog 中的声明?

最佳答案

$|仅影响当前选定的默认输出文件句柄。

您可以为文件句柄显式设置它,例如:

LOGFILE->autoflush(1);

http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles

关于perl - Perl 的 $| 的作用域是什么(OUTPUT_AUTOFLUSH) 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44634898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com