Arrays and negative indexes in Perl

匿名 (未验证) 提交于 2019-12-03 02:26:02

问题:

I am newbie in Perl and I am reading about arrays.
As I understand the arrays expand automatically as needed (cool!)
But I also read that we can use negative indexes to access the arrays in reverse order.
E.g. an array of 3 elements can be accessed as:
$array[0] $array[1] $array[2]
or
$array[-1] $array[-2] $array[-3] (in reverse order).
My question is what happens for values smaller than -3 e.g. $array[-5]?
Does the array expand or something?

回答1:

If you read it, the result is the same as reading $array[5] ― the value doesn't exist and you get an undef out. Going off the end to the left and going off the end to the right are the same.

If you write it, you get an error. Arrays can only auto-extend to the right.



回答2:

You get an undef value if You read the value.

use strict; use warnings;  my @l = qw(A B C); print $l[-4]; 

Output to stderr (program continues to run):

Use of uninitialized value in print at ./x.pl line 7. 

Or:

my @l = qw(A B C); print "undef" if !defined $l[-4]; 

Output:

undef 

If You want to assign a value to it You get an error:

my @l = qw(A B C); $l[-4] = "d"; 

Output (program exits):

Modification of non-creatable array value attempted, subscript -4 at ./x.pl line 7. 

And actually the interval can be modified. So an array can start any value not only 0.

my @l = qw(A B C); $[ = -4; # !!! Deprecated print $l[-4], "\n"; print $l[-3], "\n"; 

Output:

A B 


回答3:

You can't, it throws the error:

Modification of non-creatable array value attempted, subscript -2



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!