我有一个使用此命令运行socat
的服务器:
socat ABSTRACT-LISTEN:test123 PIPE
我可以打开此服务器的套接字,发送一行,读一行,并使用以下代码进行打印:
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::UNIX;
my $sock = IO::Socket::UNIX->new(
Type => SOCK_STREAM(),
Peer => "\0test123"
) or die "Error creating socket: $!\n";
print $sock "Hello, world!\n";
my $line = <$sock>;
close $sock;
print $line;
但是,当我用以下内容替换最后5行时,程序挂起:
print <$sock>;
不是
<FILEHANDLE>
运算符应该从句柄中读取一行?为什么我看不到一行并打印?
最佳答案
print <$sock>
将列表上下文强加给readline,因此读取并返回所有行,直到文件结束。
如perlop中所述:
If a is used in a context that is looking for a list, a list comprising all input lines is returned, one line per list element.
正如Hakon-Haegland在下面的评论中所指出的,一种仅读取一行的简洁方法是施加标量上下文:
print scalar <$sock>
关于perl - 从Unix域套接字读取一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738770/