sprintf関数とunpack関数は、ともに引数の数値を16進表記に変換できるが、以下の挙動の違いがある。
use strict; use warnings; my $num = 12; my $hexdumpBySprintf = sprintf("%x", $num); my $hexdumpByUnpack = unpack("H*", $num); print "hexdump by sprintf: $hexdumpBySprintf\n"; # c print "hexdump by unpack: $hexdumpByUnpack\n"; # 3121
上記を実行すると、結果は以下になる。
hexdump by sprintf: c
hexdump by unpack: 3132
つまり、sprintf関数の方は、引数の 12 を数値として扱い、対応する16進文字に変換する。一方、unpack関数の方は、引数の 12 を文字として扱い、対応する16進文字列に変換する。