Search code examples
perlundefineddefinedperl5.10

Can a value be uninitialized, but still defined, in Perl?


Running ActiveState Perl 5.10.1 on win32.

How is it that this code:

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

...dies with 1, whereas changing the same line to say this:

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

...dies with Use of uninitialized value in die?

How is it defined yet uninitialized? I thought uninitialized meant undefined.


Solution

  • In the first case, the matching operation is taking place in scalar context. In the second case, it's taking place in array context, almost as if you had written:

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

    If $r->unparsed_uri matches the pattern, but $1 is undefined because the matched string ended with "/", then @groups will be an array of length 1, containing the single element undef.

    Put it all together, it's as if you'd said:

    die(undef);