CGI Perl在字符串中使用未初始化值$user

CGI Perl在字符串中使用未初始化值$user,perl,cgi,Perl,Cgi,我在检查用CGI检索的变量是否正确时遇到问题 HTML: 主要问题是,如果我只是这样做: print $user; 输出是正确的,它打印了值,但在apacheerror.log中,它仍然表示变量未初始化,然后进入“if”并退出 我还尝试使用“$user”并将字符串与undef进行比较,但不进行任何比较。要测试变量是否具有已定义的值,应使用“已定义”函数: if (!defined($user) || !defined($password)) { ... } 如果表单没有传入这些参数,那么它们

我在检查用CGI检索的变量是否正确时遇到问题

HTML:

主要问题是,如果我只是这样做:

print $user;
输出是正确的,它打印了值,但在apacheerror.log中,它仍然表示变量未初始化,然后进入“if”并退出


我还尝试使用“$user”并将字符串与undef进行比较,但不进行任何比较。

要测试变量是否具有已定义的值,应使用“已定义”函数:

if (!defined($user) || !defined($password)) { ... }

如果表单没有传入这些参数,那么它们将是未定义的,如果通过“使用警告;”启用,您将收到警告。您可以通过为分配提供回退值来确保它们已定义:

my $user = $c->param('user_name') // "";
my $password = $c->param('user_password') // "";

我们需要查看
$user
的声明/初始化与引用(您使用它的地方)之间的关系。有可能是在不同的范围内吗?这两个句子之间实际上没有任何区别。这是可行的,但我仍然对变量有问题,因为它们似乎没有定义,但我可以访问它们的值。这似乎不太可能。您需要显示一个自包含的示例代码来演示该问题。感谢您捕获该问题,并对其进行了编辑以使用正确的运算符。
if (!defined($user) || !defined($password)) { ... }
my $user = $c->param('user_name') // "";
my $password = $c->param('user_password') // "";