есть два скрипта. 1. #!/usr/bin/perl
use strict; use IO::Socket; use IO::Select;
my $texts={}; my $serv=new IO::Socket::INET( Proto => 'tcp', LocalAddr => '10.0.36.10:25', Listen => 10, Reuse => 1 );
my $sel=new IO::Select();
$sel->add($serv); my $timeout = 300;
while (1) { foreach my $cli ($sel->can_read($timeout)) { if ($cli eq $serv) { # оПЧПЕ УПЕДЙОЕОЙЕ $cli=$serv->accept(); $texts->{$cli}=""; $sel->add($cli); $cli->send("220 Welcome to Qmail Toaster",1024); } else { # рТЙЫМЙ ЛБЛЙЕ-ФП ДБООЩЕ? my ($tmp,$size); $size=$cli->recv($tmp,1024); print $size."\n"; if (defined $size && $size > 0) { #дЕКУФЧЙФЕМШОП РТЙЫМЙ $texts->{$cli}.=$tmp; # дПВБЧМСЕН ДБООЩЕ Ч ЛПОЕГ print $texts->{$cli}; work($texts,$cli); } else {#оБ УБНПН ДЕМЕ ТБЪТЩЧ УПЕДЙОЕОЙС print "no carrier.\n"; delete $texts->{$cli}; $sel->remove($cli); } } } }
sub work { my ($texts,$cli)=@_; # рТЧПЧЕТСЕН ЕУФШ МЙ РПМОБС ЖТБЪБ Й ЕУМЙ ЕУФШ ХДБМСЕН ЕЈ # ЙЪ ВХЖЖЕТБ my $ans = $texts->{$cli}; print $ans; my $mail_from; my $rcpt_to; my $quest; my $temp;
if ($ans =~ /HELO/i ) { $cli->send("Some answer");# Send some data } } проблема -- переменная $size не определена а переменная $tmp содержит в себе данные которые пришли по сети.