in reply to logically recurse parentheses
or probably in another form:$str = '( (1 == 1) and (2 < 1) ) or (2 > 0)'; while ($str =~ s/(\([^()]+\))/$1/ee) { if (not eval($1)) { print "error: $1\n"; last; } }
which prints:$str = '( (1 == 1) and (2 < 1) ) or (2 > 0)'; while ($str =~ s/(\([^()]+\))/qq($1 || 0)/ee) { print eval($1) ? 'ok' : 'error'; print ": $1\n"; }
The problem is that it actually recursively checks every inner balanced parens even if they are after a success 'or' operator. i.e.ok: (1 == 1) error: (2 < 1) error: ( 1 and 0 ) ok: (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.$str = '( (1 == 1) or (2 < 1) ) and (2 > 0)';
|
|---|