2013-08-25 37 views
5

Các dòng sau hoạt động hoàn hảopostfix vòng lặp for trong perl không hoạt động như mong đợi

for(my $i=0; $i < ($max_size - $curr_size) ; $i++){ 
    push (@{$_}, 0); 
} 

Nhưng lần này thì không.

push (@{$_}, 0) for (1 .. ($max_size - $curr_size)); 

Nó mang lại cho tôi một thông báo lỗi như thế này:

Can't use string ("1") as an ARRAY ref while "strict refs" in use at coordReadEasy.pl line 124, <DATA> line 16. 

Tại sao? làm sao tôi có thể giải quyết việc này?

Trả lời

11

Phiên bản dải của for đặt $_ cho mỗi phần tử, vì vậy, trong @{$_} bạn đang cố gắng coi trọng $_ như thể nó là tham chiếu mảng. Đây là tất cả tương đương:

for my $x (1..10) { 
    print "$x\n" 
} 

for (1..10) { 
    print "$_\n" 
} 

print "$_\n" for (1..10); 

Các giải pháp dễ dàng là để tạo ra một biến khác để tham khảo mảng của bạn:

push @{$ref}, 0 for 1 .. $max_size - $curr_size; 
+3

Thậm chí dễ dàng hơn: '@ $ ref = (0) x ($ MAX_SIZE - $ curr_size) ':) – friedo

+3

@friedo Ngoại trừ việc ghi đè nội dung trong mảng từ trước. Bạn có thể làm 'push @ $ ref, (0) x ($ max - $ curr)' mặc dù. – TLP

+5

Tôi muốn thêm: ** Bạn không thể sử dụng biến khác nhau trong vòng lặp postfix, chỉ '$ _' ** – gaussblurinc

Các vấn đề liên quan