Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re^4: Array/List Strangeness

by Taulmarill (Deacon)
on Aug 05, 2009 at 09:45 UTC ( #786022=note: print w/replies, xml ) Need Help??

in reply to Re^3: Array/List Strangeness
in thread Array/List Strangeness

There is no such thing as a non-existing array element. Every element of an array, which has not been set to something else, will return the value undef. Even if you only use the first 10 elements of the array, all other elements are virtually existing and hold the value undef. Also, an array is evaluated as a list in list context, but this happens after the slicing. Compare the results of the following code:
use Data::Dumper; my @foo = qw/a b c/; my @bar = $foo[3]; print Dumper \@bar; @bar = ( @foo )[3]; print Dumper \@bar;

Replies are listed 'Best First'.
Re^5: Array/List Strangeness
by jethro (Monsignor) on Aug 05, 2009 at 10:00 UTC

    There is no such thing as a non-existing array element

    Yes, there is. An array with 5 undef values in it has size 5 and not unlimited size. And concatenating two arrays works only because the first array is not unlimited

      That's what Taulmarill meant.

      Basically: an "empty" array can have any size, but an empty list always has size 0.

      UPDATE: that should show it...

      DB<1> @a[3..5]=() DB<2> @b[3..5]=() DB<3> print scalar @a 6 DB<4> print ( () = @a,@b ) DB<5> @c= @a,@b DB<6> print scalar @c 6 DB<7> @c=(@a,@b) DB<8> print scalar @c 12 DB<9> print ( () = (@a,@b) ) DB<10> push @a,@b DB<11> print scalar @a 12 DB<12> x @a 0 undef 1 undef 2 undef 3 undef 4 undef 5 undef 6 undef 7 undef 8 undef 9 undef 10 undef 11 undef

      Line 12 clearly shows, that concatenating two "empty" arrays leads to a larger "empty" array...

      Anyway the difference between line 5 and 7 is somehow surprising ...

      UPDATE: Aaaaaargh!!! 8)

      In line 5, I fell into the scalar comma operator trap again ... it's basically (@c=@a),(@b)

      Cheers Rolf

        Well, Taulmarill was questioning Ikegamis words 'non-existing array element'. So I'm just pointing out that there is a real difference between non-existing array element and undef'd array element (even if we would wish otherwise to have more consistency).

        ++ for what you are saying after 'Basically:', an excellent description of the situation

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://786022]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (9)
As of 2017-05-23 18:10 GMT
Find Nodes?
    Voting Booth?