#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11118150 use warnings; while( ) { my @sizes = split ' ', ; my $regex = join '', map { "(?=(.))(\\g{-2}{$_})\\g{-2}*.*?" } @sizes; my @groups = ( /$regex/ )[ map 2 * $_ + 1, 0 .. $#sizes ]; print "[@groups]\n"; } __DATA__ cbaa 1 2 cba 1 bbaa 1 2 cccqrrtaaa 2 2 2 cccqrrtaaa 1 1 2 2 cccqrrtaaa 1 1 1 1 3 #### [c aa] [c] [b aa] [cc rr aa] [c q rr aa] [c q r t aaa]