Vì vậy, tôi chỉ theo dõi xuống một lỗi có thể được chứng minh trong chương trình con nhỏ này:địa phương giá trị giữ lại biến
sub foo {
my $bar = shift or die "Missing bar", # <--- not a semicolon
my @items =();
push @items, $bar;
return @items;
}
Rõ ràng là sai lầm là dòng đầu tiên của chương trình con kết thúc bằng một dấu phẩy. Điều này có một số hậu quả khá bất thường, như có thể thấy:
say foo(1); # 1
say foo(1); # 11
say foo(1); # 111
say foo(1); # 1111
Bây giờ, tôi hiểu rằng đây không phải lỗi cú pháp do cách toán tử dấu phẩy hoạt động. Tôi hiểu rằng @items
không được đặt thành ()
vì bên phải của or
không được tiếp cận. Câu hỏi của tôi là, làm thế nào một biến được khai báo với my
bên trong một chương trình con cho phép dữ liệu tồn tại giữa các cuộc gọi chương trình con? Có vẻ như là my
đang chuyển thành một số our
bằng cách nào đó.
Tôi không chắc chắn về câu trả lời này. Nó không phải là một biến toàn cục. Tôi đang sử dụng nghiêm ngặt và cảnh báo và biến không thể truy cập được bên ngoài chương trình con. – AKHolland
@AKHolland xin lỗi, tôi đã sửa đổi đoạn thứ hai sau khi tôi nhận ra nó không phải là toàn cục nhưng quên sửa đổi những điều sau này. –
Đã hiểu, cảm ơn – AKHolland