Печать не выполняется при использовании гусеничка()
Таким образом, у меня есть эта проблема при циклировании через сокет с циклом while.
Когда я использую это, он полностью работает нормально, но у меня есть новые строки на каждом $message
, которые я не хочу.
my $socket = new IO::Socket::INET (
LocalHost => "127.0.0.1",
LocalPort => "12345",
Proto => 'tcp',
Listen => 1,
Reuse => 1
);
my $client = $socket->accept();
while(<$client>) {
my $message = $_;
print $message;
}
Но когда я добавляю chomp, цикл завершается только тогда, когда я отключаю клиента (и я понимаю, почему).
Я предполагаю, что chomp удаляет новую строку из переменной $_
, и таким образом цикл больше не будет работать.
my $socket = new IO::Socket::INET (
LocalHost => "127.0.0.1",
LocalPort => "12345",
Proto => 'tcp',
Listen => 1,
Reuse => 1
);
my $client = $socket->accept();
while(<$client>) {
my $message = $_;
chomp($message);
print $message;
}
Итак, мой вопрос: Как я могу сделать петлю через сокет (новая строка прекращено) без наличия новых строк в сообщениях?
Огромное спасибо!
1 ответ:
Другими словами: это не ошибка, а просто задержка.
chomp
сделан на копии$_
, поэтому он не должен влиять на дескриптор сокета вообще. Более вероятно, что удаление новой строки заставляет ваш оператор печати ждать в буфере и выполнять его после завершения сценария.Попробуйте использоватьautoflush для немедленного выполнения печати.
$| = 1;