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



              

Получение почты - часть 19


next if /monitor/i; ft пример вводящего в заблуждение узла

ft выделяем первое имя узла и переводим его в нижний регистр

Smachine = lc((split)[1]);

$machine =~ s/\Q$localdomain\E$//oi;

t удаляем имя домена

$macriines{$machine}++ unless $macnines{$machine}; }

ft анализируем сообщение

$message = new Mail: :Internet VSTDIN;

$message->head->unfold();

ft проверяем тему сообщения

my Ssubject = $message->head->get('Subject');

Ssubject =' s/[.,;?]//g;

for (split(/\s+/,Ssubject)) {

if (exists $machines{lc $_}) {

print "subject: $_\n";

$found++; } } exit if $found;

ft проверяем тело сообщения

chomp(my @body = @{$message->body()}):

my Sbody = join(" ",@body);

$body =" s/t"\w\s]/ /g: и удаляем знак

@body{split( ', lc $bcdy)i = ().

for (keys %body) {

if (exists $machines!ic $_}) {

print "body: $_\n";

$*ound+-i-; } }

exit if $found,

# последняя надежда: проверяем последнюю строку

Received: Sreceived -(reverse $message->head->get('Received'))[0];

Sreceived =" s/\0$localdomain\E//g; for (split(/\s+/,Sreceived)) {

if (exists $machines{lc $_}) { print "received: $_\n";

}

Несколько комментариев к программе:

  • Простота проверки становится проблемой, когда мы сталкиваемся с вполне приемлемыми именами узлов, подобных monitor. Если имена узлов, являющиеся обычными словами, могут появиться в сообщениях, вам придется либо специально их обработать, как было сделано с next if /monitor/i, либо придумать более сложную схему анализа, что предпочтительнее.
  • Мы используем срез хэша (§body{...}), чтобы ускорить поиск по телу сообщения. За один шаг из сообщения выделяются все уникальные слова. Чтобы разобраться с этой конструкцией, можно прочитать ее изнутри. Во-первых, split() возвращает из сообщения список всех «слов» (в нижнем регистре). Эти слова используются как ключи для хэша %body. Поскольку имена ключей в хэше повторяться не могут, он будет содержать только уникальные слова из тела сообщения. Именно подобные возможности делают программирование на Perl приятным.



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