start_form的默认操作变量

时间:2011-10-20 03:57:06

标签: html perl

我目前正在编写自己的Web服务器来处理cgi脚本。在我目前的测试perl脚本中,我有一点代码

print start_html("CGI Test Page"),
   h1("CGI Test Page"),
   h2("Post Test:"),
   start_form(-method=>"POST",),
   "Post Value: ",textfield('postKey'),
   submit("Submit Post"),
   end_form;

如您所见,start_html没有在表单定义中指定的操作参数。但是使用这段代码,我得到了该表单定义的以下html输出:

<form method="post" action="/cgitest.cgi%" enctype="multipart/form-data">

我将这个奇怪的字符附加到动作变量的末尾。所以我的问题是这样的:既然我没有在perl脚本中定义动作值,那么它使用哪个环境变量来定义它的动作?

1 个答案:

答案 0 :(得分:3)

以下是CGI.pm source

的相关部分
if (defined $action) {
   $action = $self->_maybe_escapeHTML($action);
}
else {
   $action = $self->_maybe_escapeHTML($self->request_uri || $self->self_url);
}

正如您所猜测的,如果您没有定义操作,它会尝试使用$ENV{'REQUEST_URI'},但如果它是空的,则使用脚本的URL。定义该URL的子例程是self_urlurl,因此希望源代码可以帮助您确定配置中的额外百分号来自何处。