在Perl中,值是否可以未初始化,但仍然是定义的?

Kev*_*Kev 2 perl undefined defined perl5.10

在win32上运行ActiveState Perl 5.10.1.

这段代码怎么样:

die(defined($r->unparsed_uri =~ '/(logout.pl)?$'));
Run Code Online (Sandbox Code Playgroud)

...死了1,而改变同一行说这个:

die($r->unparsed_uri =~ '/(logout.pl)?$');
Run Code Online (Sandbox Code Playgroud)

......死了Use of uninitialized value in die

它是如何defineduninitialized?我认为未初始化意味着未定义.

Sea*_*ean 8

在第一种情况下,匹配操作在标量上下文中进行.在第二种情况下,它发生在数组上下文中,几乎就像你写的那样:

my @groups = $r->unparsed_uri =~ '/(logout.pl)?$';
die @groups;
Run Code Online (Sandbox Code Playgroud)

如果$r->unparsed_uri匹配模式,但$1未定义,因为匹配的字符串以"/"结尾,则@groups将是一个长度为1的数组,包含单个元素undef.

把它们放在一起,就像你说的那样:

die(undef);
Run Code Online (Sandbox Code Playgroud)