代码之家  ›  专栏  ›  技术社区  ›  Kev

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

  •  2
  • Kev  · 技术社区  · 15 年前

    在win32上运行ActiveState Perl 5.10.1。

    该代码如何:

    die(defined($r->unparsed_uri =~ '/(logout.pl)?$'));
    

    …死于 1 ,而将同一行改为:

    die($r->unparsed_uri =~ '/(logout.pl)?$');
    

    Use of uninitialized value in die ?

    怎么样 defined uninitialized ? 我认为未初始化意味着未定义。

    2 回复  |  直到 15 年前
        1
  •  8
  •   Sean    15 年前

    在第一种情况下,匹配操作在标量上下文中进行。在第二种情况下,它发生在数组上下文中,就像您编写了:

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

    如果 $r->unparsed_uri 符合模式,但 $1 undef .

    把它们放在一起,就好像你说:

    die(undef);
    
        2
  •  2
  •   Sinan Ünür    15 年前

    鉴于

    #!/usr/bin/perl -l
    
    use strict; use warnings;
    
    my $uri;
    
    die(defined($uri =~ '/(logout.pl)?$'));
    

    我明白了

    Use of uninitialized value $uri in pattern match (m//) at E:\t.pl line 7.
    1 at E:\t.pl line 7.

    这就解释了发生了什么。

    $uri m// . 因为 $uri 定义 . 因此,, defined 返回true和 die 输出 1