2012-06-17 22 views
6

câu hỏi perl về ref.

$ref = [11, 22, 33, 44]; 
print "$$ref[0]" . "\n"; 
print "@$ref[0]" . "\n"; 

khi tôi chạy perl -d.

DB<1> p @$ref 
11223344 
DB<2> p $ref 
ARRAY(0x9dbf480) 
DB<3> p \$$ref[0] 
SCALAR(0x9dbf470) 
DB<4> p \@$ref[0] 
SCALAR(0x9dbf470) 

$$ ref [0] là vô hướng đầu tiên của ARRAY (0x9dbf480).

ý nghĩa của @ $ ref [0] là gì? tôi không thể hiểu.

+5

Cân nhắc đọc qua ['perlol'] (http://perldoc.perl.org/perllol.html) và [' perldsc'] (http://perldoc.perl.org/perldsc.html). Họ làm một công việc khá tốt nếu giải thích công cụ này. –

+1

Dấu gạch chéo ngược là toán tử tham chiếu, bạn đang gọi \ $$ ref [0] và \ @ $ ref [0], bạn là dereferencing và sau đó yêu cầu tham chiếu lần nữa, bạn gần như chắc chắn không có ý định làm điều đó. –

Trả lời

10

$ref = [11, 22, 33, 44]; là tham chiếu đến mảng ẩn danh.

$$ref[0] hoặc ${$ref}[0] hoặc $ref->[0] là hủy kết nối mảng và truy lục phần tử đầu tiên.

@$ref[0] hoặc @{$ref}[0] là dereferencing mảng và nhận một mảng mảng chỉ chứa phần tử đầu tiên.

4

Đầu tiên, @$ref[0] khác với \@$ref[0]. Bạn có phiên bản cũ trong phiên gỡ lỗi của mình và phiên bản thứ hai trong tập lệnh của bạn.

Dù sao, @$ref[0] có nghĩa tương tự như @{$ref}[0]. Nếu bạn có một mảng có tên là @ref, @ref[0] sẽ là tương đương. Nó sử dụng ký hiệu slice để lấy phần tử đầu tiên của mảng.

Sự khác biệt giữa @array[$x]$array[$x] là trong trường hợp đầu tiên bạn có thể chỉ định nhiều chỉ mục và lấy lại tập hợp các phần tử từ mảng, thay vì chỉ một. Nhưng nếu bạn chỉ đặt một chỉ số giữa các dấu ngoặc, bạn sẽ nhận được kết quả tương tự.

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