私は、4つの定数チェックバイトで始まり、その後にレコードのデータ部分の長さを示す3つのオクテットが続くバイナリファイル形式を読んでいます。私はこれを次のようにデコードできます:
read($fh, $x, 7) or do {
last if eof;
die "Can't read: $!";
};
my ($type, $l1, $l2, $l3) = unpack("a4 C3", $x);
my $length = $l1 << 16 | $l2 << 8 | $l3;
中間変数を使用せずに、その3バイト値を読み取るより直接的な方法はありますか?pack
仕様に欠けているものがあるのでは?私はpack
、16進符号化やその他の気まぐれな追求を除いて、あまり使用していません。