【发布时间】:2026-01-23 00:30:01
【问题描述】:
shift
将数组的第一个值移出并返回...
这样做是为了优化速度并避免按值复制。
同样在perlsub
数组@_ 是一个本地数组,但它的元素是实际标量参数的别名。特别是,如果元素 $_[0] 被更新,相应的参数也会被更新
因此,如果我们在 sub 中执行 my $self = shift,我们会将第一个值从 @_ 移出,这是一个别名,不是吗?
但是当我们比较这两者时:
sub test {
print \$_[0]; # SCALAR(0xf73c38)
my $x = shift;
print \$x; # SCALAR(0xf79800)
}
我们看到$x 是副本。
为什么来自@_ 的shifted 值不是别名?
因此,如果也为案例my $x = shift 复制该值,那么与my $x = $_[0] 相比,它有什么好处?
【问题讨论】:
标签: perl parameter-passing subroutine