# original QL code: my $ql_code = 'select object() from Foo::Bar'; # parsed into something like this my $ast = [ select => [ 'object' ], [ from => 'Foo::Bar' ]] # create the query db my $query_db = DBM::Deep->new; $query->{$ql_code} = $ast; #### # assuming the query above # the compiled sub might look # something like this sub { my $query_engine = shift; return $query_engine->select( 'object', $query_engine->from('Foo::Bar') ); }