Could we from now on agree not to talk about (non)existing array elements,
Well we have an exists function, why shouldn't we talk about (non)existing array elements? :-)
Existence is an an important point to describe the behaviors of slicing, i.e. mostly returning undef for non-existing elements. (And I think what ikegami meant)
Let's express it in LRTs (Lanx's Rule of Thumb ;-)
1. Arrayslices (and hashslices) always return values for all requested elements. Not existing elements are represented as 'undef'.
DB<1> @a=1..2
DB<2> x @a[0,1]
0 1
1 2
DB<3> x @a[0,3]
0 1
1 undef
DB<4> x @a[2,3]
0 undef
1 undef
DB<5> @a=()
DB<6> x @a[1,2]
0 undef
1 undef
2. Listlices work alike if and only if at least one of the requested elements exists. Otherwise it returns an empty list.
DB<5> x (1,2)[0,1]
0 1
1 2
DB<6> x (1,2)[0,3]
0 1
1 undef
DB<7> x (1,2)[2,3] # DIFFERENT!
empty array
DB<8> x ()[0..3] # DIFFERENT!
empty array
DB<9> x (undef,undef)[0,2]
0 undef
1 undef
Note: Maybe the x command in the debugger should better say "empty list" instead of "empty array"....
Please correct me if I missed something with this "model" of slice behavior.
|