my $text = "{{\\escape\\sequences \\more\\sequences{\\yet\\more}\\again\\some\\more\\sequences Some Data}{\\foo\\bar Some Other Data}}"; printf("%-14s %s\n", 'Token Type', 'Token Value'); printf("%-14s %s\n", '='x14, '='x40); foreach ($text) { m/\G( { )/gcx && do { printf("%-14s %s\n", 'curly, opening', $1); redo; }; m/\G( } )/gcx && do { printf("%-14s %s\n", 'curly, closing', $1); redo; }; m/\G( \\\w+ )/gcx && do { printf("%-14s %s\n", 'escape', $1); redo; }; m/\G( [^{}\\]+ )/gcx && do { printf("%-14s %s\n", 'text', "\"$1\""); redo; }; }