Nếu bạn chuyển hai danh sách theo giá trị ... bạn sẽ nhận được một danh sách lớn trong @_
.
my(@list1,@list2) = @_;
không thực hiện bất kỳ ý nghĩa:
#!/usr/bin/perl
sub test
{
my (@a, @b) = @_;
print "@a\n";
print "@b\n";
}
my @array1 = (1,2,3);
my @array2 = (5,6,7);
test(@array1, @array2);
này sẽ kết thúc in:
1 2 3 5 6 7
<blank line>
Để vượt qua hai mảng, bạn sẽ cần phải vượt qua chúng bằng cách tham khảo:
test(\@array1, \@array2);
Và trong phụ của bạn, bạn cần coi chúng là tham chiếu:
sub test
{
my ($arrayRef1, $arrayRef2) = @_;
print "@$arrayRef1\n";
print "@$arrayRef2\n";
}
Nguồn
2010-05-21 17:12:38
có vẻ như nguyên mẫu là giải pháp tốt hơn, vì nó sẽ không yêu cầu người dùng thực hiện bất kỳ điều gì đặc biệt để chuyển đối số danh sách. cảm ơn – Mike
@ Giống như vậy, tôi khuyên bạn nên chống lại nguyên mẫu, vì một lập trình viên có kinh nghiệm perl sẽ ngạc nhiên hơn bởi họ hơn là yêu cầu để vượt qua một tham chiếu. Xem http://stackoverflow.com/questions/297034/why-are-perl-function-prototypes-bad để biết thêm về lý do tại sao các nguyên mẫu bị cau mày. – daotoad
@ Giống như vậy, tôi thường sử dụng nguyên mẫu để tạo ra lỗi trong đặc tả mẫu thử nghiệm mà tôi vừa mới nhận ra. Vì vậy, nếu bạn đã thử mẫu mã của tôi và nó đã không làm việc, lưu ý sự thay đổi trong nguyên mẫu. – daotoad