in reply to Dereferencing undef as an array: Bug or WAD?

lvalue vs rvalue. When an undefined value is dereferenced to be used as an lvalue, it gets autovivified.

>perl -Mstrict -wle"my $r; my @x; @x=@$r; print $r" Can't use an undefined value as an ARRAY reference at -e line 1. >perl -Mstrict -wle"my $r; my @x; @$r=@x; print $r" ARRAY(0x225280)

map appears to expect an lvalue, possibly because it aliases.

>perl -Mstrict -wle"my $r; my @x = map{ $_ } @{ $r }; print $r" ARRAY(0x225258)

More examples where aliasing is involved:

>perl -Mstrict -wle"my $r; my @x; for(@$r){} print $r" ARRAY(0x225280) >perl -Mstrict -wle"my $r; my @x; sub{}->(@$r); print $r" ARRAY(0x225280)

Update: Oops, fixed mention of rvalue where I meant lvalue. Re-ordered post for better readability. Added extra examples.

Replies are listed 'Best First'.
Re^2: Dereferencing undef as an array: Bug or WAD?
by BrowserUk (Patriarch) on Jun 04, 2008 at 06:02 UTC