Плохо закрывать STDOUT, так как многое предполагает, что он всегда открыт.Лучше перенаправить его на /dev/null
(unix) или nul
(Windows).
Если вы хотите перенаправить дескриптор файла,
use Sub::ScopeFinalizer qw( scope_finalizer );
{
open(my $backup_fh, '>&', \*STDOUT) or die $!;
my $guard = scope_finalizer { open(STDOUT, '>&', $backup_fh) or die $!; };
open(STDOUT, '>', '/dev/null') or die $!;
...
}
Если вы просто хотите перенаправитьSTDOUT,
{
local *STDOUT;
open(STDOUT, '>', '/dev/null') or die $!;
...
}
Если вы просто хотите перенаправить дескриптор вывода по умолчанию,
use Sub::ScopeFinalizer qw( scope_finalizer );
{
open(my $null_fh, '>', '/dev/null') or die $!;
my $backup_fh = select($null_fh);
my $guard = scope_finalizer { select($backup_fh); };
...
}