use strict; sub proc; sub proc { my $op_tree = shift; if (ref($op_tree->[0]) eq 'ARRAY') { $op_tree->[0] = proc $op_tree->[0] ; } if (ref($op_tree->[2]) eq 'ARRAY') { $op_tree->[2] = proc $op_tree->[2] ; } my $expr = sprintf '%d %s %d', @$op_tree; warn "EXPR $expr"; eval $expr; } my $sched1 = [ 1, '||', 0 ]; my $sched2 = [ 1, '&&', 0 ]; my $sched3 = [ $sched1, '&&', 1 ]; my $sched4 = [ $sched1, '&&', $sched2 ]; warn proc $sched1; warn proc $sched2; warn proc $sched3; warn proc $sched4;