Perl允许预分配的数组.我们可以在使用前预先分配数组,然后我们可以添加更多元素.例如,分配50个阵列成员然后添加第51个成员,因为阵列是可扩展的.那么预分配数组会提高性能吗?
我有一个三维数组.我想设置它的三个元素:
$array[$x][$y][0 .. 2] = (0, 1, 2);
Run Code Online (Sandbox Code Playgroud)
但是perl告诉我:
在void上下文中无用的常量(1)
在数组上下文中:
@array[$x][$y][0 .. 2] = (0, 1, 2);
Run Code Online (Sandbox Code Playgroud)
但是perl告诉我:
"]附近的语法错误
可能意味着它希望我给它两个索引然后分配给第三个维度作为一个单独的数组?但是,在此页面上,Example: Assignment Using Array Slices它表示可以使用范围运算符分配给切片,其中它表示:
@array1[1..3] = @array2[23..25];
Run Code Online (Sandbox Code Playgroud)
如何分配这样的数组切片,还是必须单独分配每个索引?
shift
将数组的第一个值移开并返回...
这样做是为了速度优化并避免按值复制.
也在perlsub
数组@_是一个本地数组,但它的元素是实际标量参数的别名.特别是,如果更新元素$ _ [0],则更新相应的参数
因此,如果我们my $self = shift在sub中执行,我们将第一个值移位@_,这是一个别名,不是吗?
但是当我们比较这两个时:
sub test {
print \$_[0]; # SCALAR(0xf73c38)
my $x = shift;
print \$x; # SCALAR(0xf79800)
}
Run Code Online (Sandbox Code Playgroud)
我们看到那$x是副本.
为什么shift@_ 的ed值不是别名?
因此,如果也为案例复制了价值my $x = shift,它会提供什么好处my $x = $_[0]呢?