Tôi có một số mã không hoạt động theo cách tôi mong đợi và tôi đánh giá cao một số trợ giúp tìm hiểu cách làm cho nó hoạt động theo cách tôi mong đợi.Sửa đổi mảng trong chương trình con
Tôi muốn sử dụng chương trình con để sửa đổi mảng đầu vào. Tôi nghĩ rằng nếu tôi chuyển qua tham chiếu đến mảng, mọi thay đổi tôi đã thực hiện đối với mảng đó cũng sẽ được phản ánh trong phiên bản của người gọi. Nhưng nó dường như không hoạt động theo cách đó.
my @test_array = qw (zero one two three);
shift_array(\@test_array);
print "POST SUBROUTINE: $test_array[0]\n";
sub shift_array {
my @array = @{(shift)};
shift @array;
print "AFTER SHIFT IN SUB: $array[0]\n";
}
in này:
AFTER SHIFT IN SUB: one POST SUBROUTINE: zero
tôi mong đợi nó để in one
cả hai lần.
Vì vậy, câu hỏi của tôi là hai lần:
1) Tại sao nó không hoạt động theo cách tôi nghĩ? Không đi qua một tham chiếu đến một mảng tạo ra một bản sao của mảng?
2) Làm cách nào để nhận được hành vi mà tôi mong đợi? Làm thế nào để tôi có một chương trình con để trượt một hoặc nhiều phần tử ra khỏi mặt trước của bản sao của một mảng đầu vào của người gọi?
Cảm ơn trước vì bất kỳ thông tin chi tiết nào bạn có thể cung cấp.
Wow. Đó là một sắc thái tôi không hiểu. Cảm ơn! – BlairHippo
@mob bạn là chính xác. Chỉnh sửa câu trả lời của tôi để làm rõ – Cfreak
lưu ý rằng với perl 5.14+ bạn có thể viết 'shift $ array' trong phần phụ và tham chiếu de xảy ra tự động. – mirod