我想关闭STDOUT以防止我的代码输出我需要进一步计算但不想在我的网页上的特定图像.
所以我想关闭STDOUT,做我必须做的代码,然后重新打开STDOUT将内容输出到网页.(不是文件)
我尝试的是:
close STDOUT;
# my code here
open STDOUT;
Run Code Online (Sandbox Code Playgroud)
这不起作用......
谢谢
STDOUT是否有“类型”?
printf STDERR ("STDOUT = %s\n", STDOUT);
printf STDERR ("\*STDOUT = %s\n", *STDOUT);
printf STDERR ("\\\*STDOUT = %s\n", \*STDOUT);
Run Code Online (Sandbox Code Playgroud)
产生:
STDOUT = STDOUT
*STDOUT = *main::STDOUT
\*STDOUT = GLOB(0x600078848)
Run Code Online (Sandbox Code Playgroud)
我了解*main::STDOUT和GLOB(0x600078848)条目。这个“流行语”让我感到好奇。
我问是因为我想将类似文件句柄的参数传递给方法调用。在“ C”中,我将使用文件描述符或File *。我希望它默认为STDOUT。我所做的是:
$OUT_FILE_HANDLE = \*STDOUT;
if(@ARGV > 0 ) {
open($OUT_FILE_HANDLE, ">", "$ARGV[0]") or die $!;
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是我不知道我到底做了什么。我提升了STDOUT吗?我怀疑我已经“毁了”(覆盖)STDOUT,这不是我想要的。
请原谅复合问题;他们似乎有关。
执行以下简化代码时:
use strict; # [01]
use warnings FATAL => 'unopened'; # [02]
# [03]
my ($inHandle, $outHandle) = (\*STDIN, \*STDOUT); # [04]
print $outHandle "STDOUT 1\n"; # [05]
# [06]
# $outHandle re-assigned to outputA.txt ??? # [07]
open($outHandle, ">outputA.txt") or die ("A: $!\n"); # [08]
print $outHandle "FILE A\n"; # [09]
print "STDOUT? 2\n"; # [10]
print STDOUT "STDOUT 3\n"; # [11]
close $outHandle; # [12]
# [13]
# $outHandle is closed # [14]
print STDOUT "STDOUT 4\n"; # …Run Code Online (Sandbox Code Playgroud)