3

所以我在使用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;
}

所以我的问题是:如何在消息中没有换行符的情况下循环通过套接字(换行符终止)?

非常感谢!

4

1 回答 1

5

chomp是在 的副本上制作的,$_因此它根本不应该影响套接字句柄。更可能的是,删除换行符会使您的打印语句在缓冲区中等待,并在脚本终止后执行。

换句话说:这不是错误,只是延迟。

尝试使用autoflush立即执行打印。

$| = 1;
于 2011-12-28T15:12:29.500 回答