Pack/Unpack の PHP 実装が、Perl バージョンでできることを実行できるかどうかを調べようとしています。PHPでできるようにしたい例は次のとおりです。
http://perldoc.perl.org/perlpacktut.html#String-Lengths
# pack a message: ASCIIZ, ASCIIZ, length/string, byte
my $msg = pack( 'Z* Z* C/A* C', $src, $dst, $sm, $prio );
# unpack
( $src, $dst, $sm, $prio ) = unpack( 'Z* Z* C/A* C', $msg );
この Perl コードが行うことは、次のように説明されています。
2 つの pack コードをスラッシュ (/) で結合すると、それらが引数リストの 1 つの値に関連付けられます。パックでは、引数の長さが取得され、最初のコードに従ってパックされますが、引数自体は、スラッシュの後のテンプレート コードで変換された後に追加されます。
つまり、最初に文字列の長さを把握してから別の手順として抽出するのではなく、可変長文字列をパックしてから 1 つの手順でアンパックできます。
PHP のマニュアルではこの機能について言及されておらず、'C/A*' のようなパターンを unpack に挿入しようとすると、エラーが発生します。それはマニュアルの見落としですか、それとも PHP バージョンがサポートしていないだけですか?