そのため、最近バグにパッチを当てようとしているときに、仲間のハッカーが、サブルーチン(メソッド)に渡される文字列の値が非常に大きい可能性があるため、経由でアクセスすると$_[1]
メモリコピーが回避されると私に言いました。@_
しかし、そもそもサブルーチンに渡された値はコピーされたと思いましたか?次の例では、メモリは2回コピーされますか?または、メソッドに渡すときに作成されたコピーについて間違っていますか?
sub foo {
my $self = shift
$_[0] # access $str in @_ directly
my ( $str ) = @_; # makes another copy of @_
}
sub bar {
my $self = shift;
my $str = 'something very large';
$self->foo( $str ); #copies $str to the @_ of foo
}
これが、メソッド自体に渡すときに(参照自体以外の)コピーを回避するスカラー参照によるパスを許可することを作成者に提案した理由です。繰り返しますが、値をサブルーチンに渡すことは、値がコピーされることを意味します@_
か?