perl - 如何在 Perl 中关闭和重新打开 STDOUT?

标签 perl cgi stdout

我想关闭 STDOUT 以防止我的代码输出我需要进一步计算但不想要在我的网页上的特定图像。

所以我想关闭 STDOUT,对我的代码做我必须做的事情,然后重新打开 STDOUT 以将内容输出到网页。 (不是文件)

我试过的是:

    close STDOUT;
    # my code here
    open STDOUT;

这不起作用...

谢谢

最佳答案

有几种方法可以解决您的问题,其中许多方法不需要您关闭 STDOUT 并冒着使您的程序的标准 I/O channel 变得困惑的风险。

例如,您可以使用 (1-arg) select 命令直接输出 print临时命令其他地方。

 print $stuff_you_want_to_send_to_STDOUT;

 select(NOT_STDOUT);
 # now default print sends things to NOT_STDOUT.
 # This doesn't need to be a real filehandle, though you may get warning
 # messages if it is not.
 ...;
 print $the_image_you_dont_want_to_go_to_STDOUT;
 ...;

 select(STDOUT);
 # now  print  sends things to STDOUT agin
 print $more_stuff_you_do_want_to_go_to_STDOUT;

您还可以重新分配 *STDOUT glob 在运行时不关闭任何句柄。
 *OLD_STDOUT = *STDOUT;
 print $for_STDOUT;

 *STDOUT = *NOT_STDOUT;     # again, doesn't need to be a real filehandle
 print $stuff_to_suppress;

 *STDOUT = *OLD_STDOUT;     # restore original STDOUT
 print $more_stuff_for_STDOUT;

关于perl - 如何在 Perl 中关闭和重新打开 STDOUT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417185/

相关文章:

perl - 如何在 Perl 中找到比给定日期早三天的日期?

regex - 为什么正则表达式不适用于 Perl 中的全局标识?

linux - Ethernet.pm 模块在输出中抛出 DDD

java - 如何从动态服务器端 URL 加载 Java 小程序?

从命令行执行时 CGI C 输出正确,但从 web 请求执行时不正确

perl - DBD::Pg::st 执行失败:错误:列 "***"不存在

html - 如何获得没有 ERROR 500 的 env(REQUEST_METHOD)

powershell - 如何在Powershell中基于主机名将设备对象过滤为单个对象?

c++ - 如何将 "cout"、 "cerr"、 "stdout"和 "stderr"从 C++ 程序定向到单个文件

Node.js:将标准输出捕获到字符串变量中的最简单方法