2011-12-22 23 views
6

Tôi đã có nghiêm ngặt và cảnh báo trên, nhưng nó vẫn không ngừng phàn nàn về việc khởi tạo các dòng sau:Perl: Làm thế nào để tuyên bố refs mảng trống trong một hash mới?

$hash{$key} = ($row, [], [], [], ''); 

Nó cảnh báo cho rằng dòng duy nhất:

"Useless use of private variable in void context" 

"Useless use of anonymous list ([]) in void context" (3 times) 

Tôi điền dữ liệu trong sau đó, nhưng tôi muốn các chỉ mục 1, 2, 3 là tham chiếu mảng và chỉ mục 4 là một chuỗi. Tôi đang truy cập và điền dữ liệu như vậy:

$hash{$key}->[1]->[3] = 'Data'; 
$hash{$key}->[4] = $hash{$key}->[4] . 'More Data'; 

Rõ ràng, tôi đang làm điều gì đó sai, nhưng tôi không chắc chắn làm thế nào để làm cho nó đúng. (Ngoài ra, Tôi biết rằng đó dòng cuối cùng là không cần thiết, có thể đó cũng được tóm gọn trong một cách đẹp hơn?)

Trả lời

12

yếu tố của một băm chỉ có thể là vô hướng, vì vậy bạn phải thay đổi nhiệm vụ của bạn để sử dụng ẩn danh hàm tạo mảng thay vì số lần hiển thị:

$hash{$key} = [$row, [], [], [], '']; 

Xem perldsc để biết thêm thông tin.

Dòng:

$hash{$key}->[4] = $hash{$key}->[4] . 'More Data'; 

có thể được viết:

$hash{$key}->[4] .= 'More Data'; 

Và cuối cùng, trừ khi bạn thích chúng, các -> nhân vật tiềm ẩn giữa delimiters phụ, nên $hash{$key}->[1]->[3] nghĩa là điều tương tự như $hash{$key}[1][3]

3

tôi không hoàn toàn chắc chắn những gì bạn đang cố gắng để làm, nhưng nếu bạn muốn gán một mảng đến một giá trị vô hướng, bạn cần phải sử dụng dấu ngoặc để tạo ra một mảng vô danh:

$hash{$key} = [$row, [], [], [], '']; 

Trong trường hợp của bạn, những gì bạn đang cố gắng để làm được hiểu như sau:

$row, [], [], []; 
$hash{$key} = ''; 

Bởi vì bạn không thể gán một danh sách các giá trị cho một vô hướng (biến giá trị đơn). Bạn có thể, như chúng tôi đã làm ở trên, tuy nhiên, gán một tham chiếu để một mảng vô danh chứa một danh sách các giá trị cho một vô hướng.

2

Bạn hầu như đã nhận nó.

Hãy nhớ rằng mỗi băm và mảng giá trị phải là một đại lượng vô hướng, vì vậy nếu bạn muốn có một hash của mảng, bạn phải gán một tham chiếu mảng để chìa khóa băm của bạn. Vì vậy:

$hash{$key} = [ $row, [], [], [], '' ]; 

là những gì bạn muốn.

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