Benchmark: timing 10000000 iterations of control, match, substr, unpack... control: 5 wallclock secs ( 5.65 usr + 0.00 sys = 5.65 CPU) @ 1769911.50/s (n=10000000) match: 22 wallclock secs (21.12 usr + 0.00 sys = 21.12 CPU) @ 473484.85/s (n=10000000) substr: 12 wallclock secs (11.88 usr + 0.00 sys = 11.88 CPU) @ 841750.84/s (n=10000000) unpack: 8 wallclock secs ( 9.04 usr + 0.00 sys = 9.04 CPU) @ 1106194.69/s (n=10000000)