Все, что быть сказанным, я могу, конечно, видеть разумные случаи, что ни одна из тех точек действительно не имеет значения.
Мой ответ:
use IO::Null;
print "does print.";
my $null = IO::Null;
my $oldfh = select($null);
print "does not print.";
select($oldfh);
print "does print.";
Я понимаю, что на этот вопрос был дан ответ, но я думаю, что стоит знать об альтернативном методе делать это. В частности, если что-то сильно увлечено печатью на STDOUT
…
# Store anything written to STDOUT in a string.
my $str;
open my $fh, '>', \$str;
{
local *STDOUT = $fh;
code_that_prints_to_stdout();
}
Ключевой бит - local * STDOUT
. Он заменяет обычный STDOUT
дескриптором файла по вашему выбору, но только для области действия блока, содержащего локальный .
Если вы хотите использовать только модули в стандартной библиотеке, File :: Spec
имеет функцию devnull ()
. Он возвращает строку, представляющую нулевое устройство ( "/ dev / null"
в * nix), которое можно предположительно открыть с помощью open ()
.
open my $saveout, ">&STDOUT";
open STDOUT, '>', "/dev/null";
(do your other stuff here)
open STDOUT, ">&", $saveout;