use Benchmark 'cmpthese'; our $buffer = "abcdef\x00ghik" x 10_000; our %hash = map {(ord($_) => $_)} "a" .. "z"; our %array; foreach my $ch ("a" .. "z") { $::array[ord $ch] = $ch; } cmpthese -1, { split => 'my @a = split //, $::buffer', pack => 'my @a = unpack "C*", $::buffer', pack_chr => 'my @a = map chr, unpack "C*", $::buffer', regexp => 'my @a = $::buffer =~ /./g', hash => 'my @a = map $::hash{$_}, unpack "C*", $::buffer', array => 'my @a = map $::array[$_], unpack "C*", $::buffer', }; __END__ Rate hash array pack_chr regexp split pack hash 3.81/s -- -35% -39% -39% -56% -87% array 5.83/s 53% -- -6% -6% -32% -80% pack_chr 6.19/s 63% 6% -- -0% -28% -79% regexp 6.19/s 63% 6% 0% -- -28% -79% split 8.57/s 125% 47% 38% 38% -- -71% pack 29.6/s 678% 409% 378% 378% 246% --