in reply to logically recurse parentheses

Hi, I was thinking that the OP can use a loop like the following to recursively check the embedded logical relations:
$str = '( (1 == 1) and (2 < 1) ) or (2 > 0)'; while ($str =~ s/(\([^()]+\))/$1/ee) { if (not eval($1)) { print "error: $1\n"; last; } }
or probably in another form:
$str = '( (1 == 1) and (2 < 1) ) or (2 > 0)'; while ($str =~ s/(\([^()]+\))/qq($1 || 0)/ee) { print eval($1) ? 'ok' : 'error'; print ": $1\n"; }
which prints:
ok: (1 == 1) error: (2 < 1) error: ( 1 and 0 ) ok: (2 > 0)
The problem is that it actually recursively checks every inner balanced parens even if they are after a success 'or' operator. i.e.
$str = '( (1 == 1) or (2 < 1) ) and (2 > 0)';
This is supposed to be a success pass, but it will return: (2 < 1) in my first code snippet which I think is not what OP wanted. Just some of my thought, might be useful for OP anyway.
Regards,
Xicheng