apr_pool_t *p = parms->temp_pool;
apr_pool_t *p = parms->pool;
MP_CMD_SRV_DECLARE(perl){    apr_pool_t *p = parms->temp_pool;    const char *endp = ap_strrchr_c(arg, '>');    const char *errmsg;    char *code = "";    char line[MAX_STRING_LEN];    apr_table_t *args;    ap_directive_t **current = mconfig;    int line_num;    if (!endp) {        return modperl_cmd_unclosed_directive(parms);    }    MP_CHECK_SERVER_OR_HTACCESS_CONTEXT;    arg = apr_pstrndup(p, arg, endp - arg);    if ((errmsg = modperl_cmd_parse_args(p, arg, &args))) {        return errmsg;    }    line_num = parms->config_file->line_number+1;    while (!ap_cfg_getline(line, sizeof(line), parms->config_file)) {        /*XXX: Not sure how robust this is */        if (strEQ(line, "</Perl>")) {            break;        }        /*XXX: Less than optimal */        code = apr_pstrcat(p, code, line, "\n", NULL);    }    /* Here, we have to replace our current config node for the next pass */    if (!*current) {        *current = apr_pcalloc(p, sizeof(**current));    }    (*current)->filename = parms->config_file->name;    (*current)->line_num = line_num;    (*current)->directive = apr_pstrdup(p, "Perl");    (*current)->args = code;    (*current)->data = args;    return NULL;}