#!/usr/bin/perl -w use strict; my %op_code= ( '||' => sub { $_[0] || $_[1] }, '&&' => sub { $_[0] && $_[1] }, ); sub proc { my $op_tree = shift; return $op_tree if ! ref($op_tree); warn "EXPR @$op_tree"; return $op_code{$op_tree->[1]}->( map proc($_), @{$op_tree}[0,2] ); } 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;