my $data = do {local $/; }; my $braces_re = qr/ \{ (?: (?> [^{}]+ ) | # Use either (?PARNO) or (??{ code }). #(?R) (??{ $braces_re }) )* \} /sx; $data =~ s{($braces_re)}{ my $len = length $1; "<$len> $1 " }eg; print $data; 1; __DATA__ { ... } { { } } { { { } } } { { } { { { } } } } { ... } #### <7> { ... } <7> { { } } { <7> { { } } } { <3> { } { <7> { { } } } } <7> { ... } #### <7> { ... } <7> { { } } <11> { { { } } } <19> { { } { { { } } } } <7> { ... } #### Global symbol "$braces_re" requires explicit package name at (re_eval 1) line 2. #### my $braces_re; $braces_re = qr/