perl - 使用 chomp() 时打印失败

标签 perl sockets loops while-loop chomp

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

所以我的问题是:如何在消息中不包含换行符的情况下循环遍历套接字(换行符终止)?

非常感谢!

最佳答案

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

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

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

$| = 1;

关于perl - 使用 chomp() 时打印失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657486/

相关文章:

c - memcpy() 修改客户端套接字文件描述符

java - 如何在不使用thread.sleep的情况下延迟android中的循环?

python - 在没有 if 的循环中查找最大项

ruby - `each` 带有附加参数的循环

Perl CGI 持久性 cookie

perl - 如何有条件地使用 Test::Simple?

windows - 如何配置 Module::Build 以不将文件安装为只读?

perl - 从命令行重命名多个文件

angularjs - 套接字编程 MEAN 堆栈、端口 3000 上的 Express 应用程序和端口 8000 上的 Angular 应用程序

C:关于 Beej 的网络指南的问题......这里有一个假设吗?