Код:#!/usr/local/bin/perl
use warnings;
use strict;
use IO::Socket;our $sock = new IO::Socket::INET(PeerAddr => $server,
PeerPort => $port,
Proto => 'tcp') or die "Can't connect\n";our $slink = \$sock;
while (my $input = <$sock>) {
chomp $input;
$input =~ s/(\r|\n)//gs;
if ($input =~ /^DATA(.*)$/i) {
sock_data_work($input);
}
}sub sock_data_work {
...
if (...) {
print $sock "line\n";
while (my $inp =<$$slink>) {
....
}
}
}
Суть: есть скрипт, слушающий сокет и обрабатывающий приходящие данные. При наступлении условия вызывается функция sock_data_work, которой передаются все данные из сокета, подхлдящие под регулярку. Внутри этой функции я хочу получить доступ ко всем данным сокета.
Если пробовать в лоб - while (my $inp = <$sock>) - то есть слушать тот же сокет по тому же объекту - в $inp приходят только те данные, которые удовлетворяют регулярке ^DATA(.*)$, но не остальные.По ссылке как выше - не работает в принципе.
Подскажите, как организовать что-то подобное.
> Суть: есть скрипт, слушающий сокет и обрабатывающий приходящие данные. При наступлении
> условия вызывается функция sock_data_work, которой передаются все данные из сокета, подхлдящие
> под регулярку. Внутри этой функции я хочу получить доступ ко всем
> данным сокета.
> Если пробовать в лоб - while (my $inp = <$sock>) - то
> есть слушать тот же сокет по тому же объекту - в
> $inp приходят только те данные, которые удовлетворяют регулярке ^DATA(.*)$, но не
> остальные.ну не может этого быть, смотрите свой код, когда у вас выполняется ДАТА вы сваливаетесь в процедуру которая читает весь ваш ввод, оставшийся! может ваш иф не выполняется? что вы еще хотите получить? к каким "всем данным" вы хотите получить доступ?
еще раз сформурируйте вопрос.> По ссылке как выше - не работает в принципе.
ссылк не ссылка не важно.
не работает ссылка, разыменуйте ее в процедуре и получите не ссылку.