我正在研究Webmin的源代码。
($wuser) = grep { $_->{'name'} eq $in{'user'} } &acl::list_users();
如果我们$in{'user'}像这样传递?user=notexist,变量$wuser将是undef,不是吗?
抽象代码描述了下面发生的情况。
# $wuser is undef now.
#die Dumper($wuser);
if($wuser){die 'not die here';}
if ($wuser->{'pass'} eq 'x') {
#never reach here.
die 'not die in branch 1';
}
elsif ($wuser->{'pass'} eq '*LK*' ||
$wuser->{'pass'} =~ /^\!/) {
#never reach here too.
die 'not die in branch 2';
}
if($wuser){die 'so....why die here '.Dumper($wuser);}
# $wuser is {} now.
}
Run Code Online (Sandbox Code Playgroud)
所以...什么时候以及如何undef变量变成{}而没有任何定义...
perl ×1