http://qs1969.pair.com?node_id=74912

cajun2019 has asked for the wisdom of the Perl Monks concerning the following question:

Apparently (undef)[0] is being interpreted as a null list. In the context of the other statements, why is that? Thanks...
%tmp= (nothing => undef, one => 1); # $tmp{nothing} is undef %tmp= (nothing => (0, undef)[0], one => 1); # $tmp{nothing} == 0 %tmp= (nothing => [undef, 0]->[0], one => 1); # $tmp{nothing} is undef %tmp= (nothing => scalar ((0, undef)[1]), one => 1); # $tmp{nothing} is undef %tmp= (nothing => (undef), one => 1); # $tmp{nothing} is undef %tmp= (nothing => (undef)[0], one => 1); # $tmp{nothing} eq 'one'*** Why not undef? %tmp= (nothing => (undef, 0)[0], one => 1); # $tmp{nothing} eq 'one'*** Why not undef? 1;

Replies are listed 'Best First'.
Re: list/array context mystery
by clintp (Curate) on Apr 24, 2001 at 04:19 UTC
    For what it's worth, under 5.6 the last two examples do result in undef.

    Under 5.00503 (the only older version I had laying around) it produces "one". You might want to wander through the changelogs for 5.6 and see what might have fixed this if you're really curious.