检查 CGI.pm 中是否存在空参数

Check for the existence of empty parameters in CGI.pm

要检查请求参数是否具有值 (http://example.com?my_param=value),您可以使用

query->param('my_param')

如果使用 no_value 形式,这似乎是不稳定的:http://example.com?my_param .

有没有办法简单地检查 CGI.pm 中参数的存在?

这似乎取决于浏览器的实现。根据this Perlmonks thread from 2001, empty parameters might not be returned. But if they are, the key will be there, but contain an empty string q{}. If the argument wasn't present, it will be undef, so you can check with defined.

您可以检查参数是否存在并定义。以下代码

#!/usr/bin/env perl
use strict;
use warnings;
use CGI;
my $cgi = CGI->new();
print $cgi->header;

my $defined = defined $cgi->param('tt');
my $val = $cgi->param('tt');
print <<END;
<!doctype html>
<html> HTML Goes Here 
<h1>tt: "$defined" "$val"</h1>
</html>
END

将生成输出:

<!doctype html>
<html> HTML Goes Here 
<h1>tt: "1" ""</h1>
</html>

当 URI 是 http:///cgi-bin/t.pl?someother=something&tt

不幸的是,当它是 参数时,这不起作用。

所以为了确定,你必须测试:

my $defined = defined $cgi->param('tt') || $ENV{QUERY_STRING} eq 'tt';