unpack を使用するとき、b3 が長さ 3 ビットのビット文字列を返すことを期待していました。
(websocket データ パケットを解析するために) 書きたいと思っていたコードは次のとおりです。
my($FIN,$RSV1, $RSV2, $RSV3, $opcode, $MASK, $payload_length) = unpack('b1b1b1b1b4b1b7',substr($read_buffer,0,2));
これは私が望んでいたことをしていないことに気付きました。
上記のテンプレートの代わりに b16 を使用すると、2 バイト全体が最初の変数に "1000000101100001" として読み込まれます。
それは素晴らしいことです。私はそれで問題ありません。
一連の部分文字列を実行することで、これまでに得たものを使用できますが、これを行うより良い方法はありますか? 私が作成しようとしたものと同様のテンプレートを使用して、そのビット文字列を処理する方法があることを期待していました. 右側にパケットの仕様を渡し、左側に変数のリストを渡すことができるある種の関数はありますか?
編集:正規表現でこれを行いたくありません。これは、頻繁に発生する非常にタイトなループになるためです。
Edit2: 理想的には、ビット文字列を評価する対象 (ブール値、整数など) を指定できると便利です。