Perl для системного администрирования



              

Распространенные ошибки при отправке почты - часть 2


Sunit = 60;

 увеличиваем задержку относительно этого значения (1минута)

# интервал времени, прошедший с момента отправки предыдущего

# сообщения и последняя степень 2, которая использовалась для

# расчета интервала задержки. Созданная нами подпрограмма

# возвращает ссылку на анонимный массив с этой информацией

sub time_closure {

my($stored_sent,$stored_power)=(0,-1); return sub {

(($stored_sent,$stored_power) = @_) if @_; [$stored_sent,$stored_power]; > };

$last_data=&time_closure; # создаем замыкание

ft возвращаем значение "истина" при первом вызове и затем после

# задержки

sub expbackoff {

my($last_sent,$last_power) = @{&$last_data};

# возвращаем true, если это первое наше обращение или если

# текущая задержка истекла с тех пор, как мы спрашивали

 последний раз. Если мы возвращаем значение true, мы

 запоминаем время последнего утвердительного ответа и

 увеличиваем степень двойки, чтобы вычислить задержку.

if (!$last_sent or ($last_sent +

(($unit -.$last_power >= $max) 9

$max : $unit * 2**$last_power) <= time())){

&$last_data(time().++$last„power); return 1;

}

else {

return 0; } >

Подпрограмма expbackoffQ возвращает значение true (1), если нужно отправить сообщение, и false (0), если нет. При первом вызове она возвращает true, а затем быстро увеличивает время задержки до тех пор, пока значение t rue не станет появляться лишь раз в день.

Чтобы сделать программу более интересной, я применил необычную конструкцию под названием замыкание (closure) для хранения времени последней отправки сообщения и последней степени двойки, используемой для расчета задержки. Замыкание используется как способ скрытия важных переменных от остальной программы. В данной маленькой программе это было сделано из любопытства, но польза от такой технологии очень быстро становится очевидной в программах большего размера, где более вероятно, что другой код может случайно перезаписать значения этих переменных. Вот, вкратце, как работают замыкания.




Содержание  Назад  Вперед