sub pack (@array) returns Array { my @unpacked = @array; my (@list, @packed); while @unpacked { @list.push(@unpacked.shift) while !@list || @list[0] eq @unpacked[0]; @packed.push([@list]); @list = (); } return @packed; } pack().perl.say;