Design of an AST node. $node = { type => 'Node type', children => [ subnode1, subnode2, ... # other nodes ], # optional debug information debug => { file => 'filename', # if the same as the parent can be omitted line => 123 } ... # other optional information depending on the node type }