在Perl中关闭打印缓冲区的魔术标点符号“$|”有哪些替代方法?

在Perl中关闭打印缓冲区的魔术标点符号“$|”有哪些替代方法?,第1张

概述我正在重构一些旧代码(由其他人重构),我在一些CGI脚本的顶部遇到了以下内容: #Turn on output bufferinglocal $| = 1; perlcritic像往常一样无益地指出了显而易见的:“魔术标点符号使用”.有没有替代品或perlcritic只是脾气暴躁? 此外,仔细检查.我认为代码是错误的. 如果我没有弄错的话,这意味着与评论所说的完全相反.它关闭了输出缓冲.我的记忆 我正在重构一些旧代码(由其他人重构),我在一些CGI脚本的顶部遇到了以下内容:

#Turn on output bufferinglocal $| = 1;

perlcritic像往常一样无益地指出了显而易见的:“魔术标点符号使用”.有没有替代品或perlcritic只是脾气暴躁?

此外,仔细检查.我认为代码是错误的.

如果我没有弄错的话,这意味着与评论所说的完全相反.它关闭了输出缓冲.我的记忆有点生疏,我似乎无法找到描述这个神奇标点符号的Perl文档.脚本在mod_perl中运行.

是否可以解决Perl的缓冲行为并获得任何性能提升?关于此的大部分内容都来自21世纪头十年的早期.这仍然是一种有效的良好做法吗?

解决方法 你的问题似乎有点分散,但我会尽力回答.

你想阅读perldoc pervar. relevant section说:

$|      If set to nonzero,forces a flush right away and after every write or print on the currently selected output channel.  Default is 0           (regardless of whether the channel is really buffered by the system or not; $| tells you only whether you've asked Perl explicitly to           flush after each write).  STDOUT will typically be line buffered if output is to the terminal and block buffered otherwise.  Setting this           variable is useful primarily when you are outputting to a pipe or socket,such as when you are running a Perl program under rsh and want           to see the output as it's happening.  This has no effect on input buffering.  See "getc" in perlfunc for that.  See "select" in perldoc           on how to select the output channel.  See also IO::Handle. (Mnemonic: when you want your pipes to be piPing hot.)

所以,是的,评论是不正确的.设置$| = 1确实禁用缓冲,而不是打开它.

至于性能,默认情况下启用输出缓冲的原因是因为这可以提高性能 – 即使在2011年 – 并且可能直到时间结束,除非量子I / O以某种方式改变了我们完全理解I / O的方式.

禁用输出缓冲的原因不是为了提高性能,而是以牺牲性能为代价来改变其他一些行为.

由于我不知道你的代码做了什么,我不能推测它想要禁用输出缓冲的原因.

禁用输出缓冲的一些(但绝不是全部)可能的原因:

>您正在写入套接字或管道,而另一端则需要立即响应.>您正在向控制台写入状态更新,并希望用户立即看到它们,而不是在行尾.当您在每次 *** 作等之后输出一段时间时,这种情况尤为常见.>对于CGI脚本,您可能希望浏览器在处理完成之前显示一些HTML输出.

总结

以上是内存溢出为你收集整理的在Perl中关闭打印缓冲区的魔术标点符号“$|”有哪些替代方法?全部内容,希望文章能够帮你解决在Perl中关闭打印缓冲区的魔术标点符号“$|”有哪些替代方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存