pack

http://mikeneko.creator.club.ne.jp/~lab/perl/numerical_transform/

# 上のお手本どおり
$char =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg;

# しかしどういうわけか、
$char =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1) )/eg;
# こちらの方がポピュラーです。

pack("H2") を使えば一撃で変換できるのに、見るからに遅そうな hex() + pack() がよく使われているのはなぜでしょう?ベンチマークをとってみましょう。

Benchmark: timing 5000 iterations of a, b...
a: 3 wallclock secs ( 3.24 usr + 0.00 sys = 3.24 CPU) <- pack()
b: 6 wallclock secs ( 5.19 usr + 0.00 sys = 5.19 CPU) <- hex()+pack()

およそ2倍弱ほど違います。

hexダンプをバイナリキャラクタに戻して見るのに、サーバサイドで手軽に作業できるようPerlでフィルタを作って、tail -100 XXX.log | dumpdisp.pl みたいな形で使いたいので。