因此,我在使用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;
}所以我的问题是:如何在消息中不包含换行符的情况下循环通过套接字(换行符终止)?
非常感谢!
发布于 2011-12-28 23:12:30
chomp是在$_的副本上生成的,因此它应该完全不会影响套接字句柄。更有可能的是,删除换行符会使print语句在缓冲区中等待,并在脚本终止后执行。
换句话说:这不是一个错误,只是一个延迟。
尝试使用autoflush立即执行打印。
$| = 1;https://stackoverflow.com/questions/8657486
复制相似问题