go ahead... be a heretic PerlMonks

### 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

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

Create A New User
Node Status?
node history
Node Type: note [id://786022]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2017-12-11 04:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
What programming language do you hate the most?

Results (286 votes). Check out past polls.

Notices?