sub AUTOLOAD { my $tree = shift; our $AUTOLOAD; print OUT "@@@ $AUTOLOAD(\$tree) @@@\n"; recurse($tree); } #### sub coderef { if (exists($main::{$_[0]})) { $main::{$_[0]}($_[1]); } else { print OUT "@@@ main::$_[0](\$tree) @@@\n"; recurse($_[1]); } } sub startrule { my $tree = shift; foreach (@$tree) { if ( ref eq 'ARRAY' ) { if ( ref( @$_[0] ) eq 'ARRAY' ) { startrule($_); } else { coderef(@$_[0],$_); } } } }