# Define base variable detector: any (possibly-nested) angle-bracketed string. # Patterns to extract or >variables< from a string. my $out_angled; $out_angled = qr/ < ( [^<>] | (??{$out_angled}) )* > /x; # open angle-bracket then ... # non-angle chars ... # or ... # another angle-bracketed item ... # if there are any ... # and a close angle-bracket