我正在尝试完成一个需要从套接字读取 4 个无符号整数的小型 Perl 学习项目。我无法读取超过 1 个整数,在四处挖掘后我找到了解决方案。但我需要了解我做错了什么(并且已经阅读了几本 Perl 书籍、perldocs 等,但无济于事。)
示例 1:这是成功的解决方案代码(原始),假设以下两者的套接字连接都成功:
{
local $/ = \16; # make <> read in 16 bytes with one swoop.
my @integers = unpack "IIII", <$sock>;
print "numbers: @val\n";
}
示例 2:我在下面尝试了这个。如果我在拆包之前打印输入,我只会得到一个整数:
my $input;
$sock->recv($input,16,0);
my @integers = unpack("IIII", $input);
具体问题:
- 在示例 1 中,“$/”到底是什么?它是如何“改变”<>,我认为它是 STDIN 的?
- 在示例 2 中,为什么我的 recv() 不会从套接字中取出一个以上的整数,是否有某种原因?我的理解(perldoc)是“大小”参数默认为“字节”,整数是 4 个字节?
任何帮助,指针等表示赞赏。顺便说一句,“学习项目”是 overthewire.org - 很酷的东西。