sub new { my $class = shift; my $self = { children => [] }; bless $self, $class; } sub addSubBlock # (newblock) { my $self = shift; my $block = shift; push @{$self->{children}}, $block; } sub traverse_preorder { my $self = shift; my @children = (); foreach my $child (@{$self->{children}) { push @children, $child, $child->traverse_preorder; } return @children; }