Empty Hash Values

Matt Lawrence matt.lawrence at virgin.net
Sun Apr 12 20:09:43 BST 2009


Nigel Peck wrote:
>
> When I create a hash like this:
>
> my $hash = {
>     element_1 => 'example',
>     element_2 => $var,
>     element_3 => $var2
> };
>
> If $var is undefined, then the value of 'element_2' becomes 
> 'element_3'. Not what I want.
That doesn't ever happen with scalar values, defined or not. This 
normally occurs when a function returns nothing (e.g. "return" as 
opposed to "return undef"). Any functions called within hash 
construction are in list context, so if they return lists, they get 
incorporated into the hash. The simplest way to fix that is to 
explicitly set scalar context:

my $hash = { element_x => scalar function() };

or call the function first in scalar context and add it to the hash after:

my $var = function();
my $hash = { element_x => $var };

Matt



More information about the london.pm mailing list