Как я могу подавить STDOUT временно в программе Perl?

  1. безопасность. Ваш веб-сервер живет в демилитаризованной зоне, доступной для общедоступного Интернета и взятия недоверяемого входа от анонимных пользователей. Если Ваш веб-сервер поставлен под угрозу, и Вы следовали наименьшему количеству правил полномочия в соединении с Вашим DB, максимальное воздействие - то, что Ваше приложение может сделать через базу данных API. Если у Вас есть бизнес-промежуточный уровень, у Вас есть еще один шаг между Вашим взломщиком и Вашими данными. Если с другой стороны, Ваша база данных находится на том же сервере, у взломщика теперь есть корневой доступ к Вашим данным и серверу.
  2. Масштабируемость. Хранение Вашего веб-сервера, не сохраняющего состояние, позволяет Вам масштабировать свои веб-серверы горизонтально в значительной степени легко. очень трудно горизонтально масштабировать сервер базы данных.
  3. Производительность. 2 поля = 2 раза ЦП, 2 раза RAM и 2 раза шпиндели для доступа к диску.

Все, что быть сказанным, я могу, конечно, видеть разумные случаи, что ни одна из тех точек действительно не имеет значения.

6
задан brian d foy 4 September 2009 в 00:55
поделиться

4 ответа

Мой ответ:

use IO::Null;

print "does print.";

my $null = IO::Null;
my $oldfh = select($null); 

print "does not print.";

select($oldfh);

print "does print.";
12
ответ дан 8 December 2019 в 04:09
поделиться

Я понимаю, что на этот вопрос был дан ответ, но я думаю, что стоит знать об альтернативном методе делать это. В частности, если что-то сильно увлечено печатью на 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 дескриптором файла по вашему выбору, но только для области действия блока, содержащего локальный .

6
ответ дан 8 December 2019 в 04:09
поделиться

Если вы хотите использовать только модули в стандартной библиотеке, File :: Spec имеет функцию devnull () . Он возвращает строку, представляющую нулевое устройство ( "/ dev / null" в * nix), которое можно предположительно открыть с помощью open () . ​​

1
ответ дан 8 December 2019 в 04:09
поделиться
open my $saveout, ">&STDOUT";
open STDOUT, '>', "/dev/null";

(do your other stuff here)

open STDOUT, ">&", $saveout;
1
ответ дан 8 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: