##
sub group {
map{
pack 'C*', @$_
} @{ +reduce {
defined $a->[0] && $a->[-1][0] && $a->[-1][0] == $b
? push @{ $a->[-1] }, $b
: push @{ $a }, [ $b ];
$a;
} [], unpack 'C*', shift }
}
##
##
print for group 'ZBBBCCZZ';
Z
BBB
CC
ZZ