ソケットから 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: 以下で試してみました。アンパックする前に入力を出力すると、整数が 1 つしか得られません。
my $input;
$sock->recv($input,16,0);
my @integers = unpack("IIII", $input);
具体的な質問:
- 例 1 の "$/" は一体何ですか? そして、STDINを読んだと思った<>はどのように「変化」しますか?
- 例 2 では、recv() がソケットから複数の整数を取り出さない理由はありますか? 私の理解 (perldoc による) では、"SIZE" パラメータのデフォルトは "bytes" で、整数は 4 バイトですか?
ヘルプ、ポインタなどをいただければ幸いです。ところで、「学習プロジェクト」は overthewire.org です。かなりクールなものです。