$braces = qr/(?\{ ([^\{\}] | (?&braces))*? \} )/x; $brackets = qr/(?\( ([^\(\)] | (?&brackets))*? \))/x; $identifier = qr/(? \w+($brackets)?( \s*(\.|->)(?&identifier))?)/;