2012-06-22 35 views
6

Biến số @. trong perl là gì?@ là gì. trong Perl?

Có vẻ là một đặc biệt, có khả năng ghi toàn cầu, và (ngạc nhiên) không suy trong dụng dấu ngoặc kép chuỗi:

use strict; 
use warnings; 

       # Under 5.8, 5.10, 5.12, 5.14, and 5.16, 
       # the following lines produce: 

@. = (3, 2, 1); # no error 
print "@.\n"; # "@." 
print @., "\n"; # "321" 

eval 'my @.; 1' # Can't use global @. in "my" at (eval 1) 
    or die [email protected];  # line 1, near "my @." 

Tôi không thể nhớ bao giờ gặp nó trước, và không nhìn thấy nó trong perlvar cũng không perldata.

+0

Sự thiếu nội suy này rất sai. Nộp một [báo cáo lỗi] (https://rt.perl.org/rt3/Ticket/Display.html?id=113792) – ikegami

+0

@ikegami: hành vi này không có giấy tờ và do đó không sai chút nào, đừng bận tâm về * rất sai *. Ngôn ngữ lập trình dành cho mọi người sử dụng làm công cụ: nếu bạn có thể tìm thấy một lập trình viên đã bất tiện bởi hành vi bất thường này thì tôi nâng mũ của tôi lên cho bạn. – Borodin

+0

@Borodin, Nội suy cũng được ghi lại và điều này trực tiếp mâu thuẫn với tài liệu. Bạn đang nói về cái gì vậy? – ikegami

Trả lời

6

perldoc perlvar trạng thái:

Perl tên biến cũng có thể là một chuỗi các chữ số hoặc một dấu chấm câu hoặc điều khiển nhân vật duy nhất. Những tên này đều được dành riêng cho các ứng dụng đặc biệt của Perl;

định danh Perl bắt đầu với chữ số, ký tự điều khiển, hoặc các ký tự chấm câu được miễn khỏi những tác động của việc kê khai gói và luôn buộc phải có trong package main; chúng cũng được miễn các lỗi strict 'vars'.

Bạn đang sử dụng tên riêng. Bạn không nên mong đợi để có thể dựa vào bất kỳ tính năng nào.

+0

Bạn có biết tại sao nó không nội suy? – pilcrow

+0

Nó được bảo lưu bởi Perl. Không có lý do gì để mong đợi nó hoạt động theo bất kỳ cách cụ thể nào. –

+1

Có lẽ, khi 'perl' nhìn vào' "@." ', Nó kiểm tra xem' @ .' có phải là một trong các biến có ý nghĩa đặc biệt không. Nếu không, nó có lẽ giả định bạn không có nghĩa là nội suy nó.Tôi không chắc chính xác loại ma thuật nào cần thiết cho nó để được giải thích khác nhau, nhưng tôi không muốn mạo hiểm ở đó. –

4

$. là số dòng hiện tại (hoặc số bản ghi) của tệp gần đây nhất.

@. không có ý nghĩa đặc biệt hoặc sử dụng


"@." không suy, nhưng "@{.}" làm.

@. được dành riêng để sử dụng trong tương lai và không nên được sử dụng

+0

Có. Liệu điều đó có thực sự tuyên bố, ví dụ: '% .' không? Tại sao không '@ .' nội suy? – pilcrow

+0

@pilcrow - Giống như '@ /', '@ ~' và một số biến mảng ký tự không phải chữ cái khác. Bạn có thể sử dụng chúng làm mảng, nhưng chúng sẽ không nội suy. –

+0

@pilcrow - Có thể được sử dụng làm băm: '% ~ = qw (1 2); in "$ ~ {1} \ n"; 'sẽ in' 2' –

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