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



   canadian pharmacy cialis             

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


(Spackage, $filename, $line, $subroutine, Shasargs,

$wantarray, Sevaltext, $is_require) = caller($frames);

Где $f rames - это количество нужных фреймов на стеке (если вызывались подпрограммы из подпрограмм). Чаще всего вы будете устанавливать $f rames в 1. Вот пример списка, возвращаемого функцией caller() в середине кода для сервера из последнего полного примера:

('main','repserver1,32,'main:iprintmail1,1,undef)

Подобная запись указывает, что сценарий, запущенный из файла repserver в строке 32, находился в пакете main. В этот момент выполнялся код из подпрограммы main: .printmail (у нее есть аргументы, кроме того, она не вызывается в списочном контексте).

Если вы не хотите вручную применять caller(), можете воспользоваться отчетом о проблемах, предоставляемым модулем Carp.

Когда?

Опишите состояние программы в момент возникновения ошибки. К примеру, какой была последняя строка прочтенных данных?

Почему?

Если сумете, ответьте на незаданный читателем вопрос: «Зачем беспокоить меня этим почтовым сообщением?» Ответ может быть очень простым, например: «данные об учетных записях не были полностью обработаны», «DNS-сервер сейчас недоступен» или «в серверной пожар». Это даст читающему представление о предмете разговора (и, возможно, побудит к изучению).

Что?

Ну и наконец, надо сказать о том, что же пошло не так раньше всего. Вот небольшой пример на Perl, который охватывает все эти пункты:

use ext::Wrap;

sub problemreport {

9 $shortcontext - описание проблемы в одной строке

# Susercontext - подробное описание проблемы Получение почты 315

 Snextstep - лучшее предположение о том, что делать, чтобы исправить

проблему

my($shortcontext,Susercontext,Snextstep) = @_: my

($filename, $line, Ssubroutine) = (caller(1) )[1,2,3]:

push(@return,"Проблема с Sfilename $shortcortext\n '):

push(@return,"** Сообщение о проблеме с Sfilename ***\n\n"):

push(@return,fill("","","- Проблема: Susercontext") "\r\n")

push(@return,"- Место: строка Sline файла Sfilename в

$subroutine\n\n"); push(@return,"- Произошла: ".scalar localtime(time)."\n\n");

push(@return,"- Дальнейшие действия: $nextstep\n"):

\@return; }

sub fireperson {

Sreport = &problemreport("компьютер горит ", «EOR, «EON);

При составлении отчета загорелась задняя часть компьютера.

Случилось это сразу же после обработки пенсионного плана для ORA. EOR

Пожалуйста, потушите пожар, а потом продолжайте работу. EON

print @{$report}; } &fireperson;

Обращение к &problemreport выведет, начиная с темы сообщения, отчет о проблеме, согласующийся с Mail: : Mailer, как и в предыдущих примерах.

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




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