2009-07-07 31 views
22

Tại sao biến Perl cần phải bắt đầu bằng các ký tự khác nhau (sigils)?

  • biến vô hướng bắt đầu với $

  • Hashes bắt đầu với %

  • Mảng bắt đầu với @

Tại sao họ như thế này?

+4

Câu trả lời ngắn gọn: không. Xem xét mảng và băm. Điều đó nói rằng, câu hỏi là khó hiểu. Chăm sóc để làm rõ? –

+1

Bạn có hỏi tại sao những sigils đặc biệt này đã được chọn (trái ngược với ba cái khác nhau)? Hoặc tại sao có sigils ở tất cả? – Thilo

+0

Tôi hỏi về chỉ sigils, sau đó tôi nhận ra bản thân của tôi tại sao varialble khác cũng có như thế. vì vậy tôi hỏi về tất cả? – joe

Trả lời

56

Khi tôi bắt đầu bằng cách sử dụng Perl nó được giải thích với tôi rằng những nhân vật này đã được chọn vì:

  • $ nhìn một chút giống như một 's' đến nỗi cho s calars,
  • @ có chữ 'a' ở giữa sao cho số này là a rrays và
  • % dùng cho băm vì nó trông giống như cặp khóa-giá trị chia cho dấu gạch chéo.
+6

Câu trả lời thú vị :-) – joe

+7

Có, cuốn sách Camel cho cùng một câu chuyện. Hoặc ít nhất, nó không nói rằng họ đã thực sự được lựa chọn vì những lý do đó, nhưng bạn có thể nhớ tốt hơn những gì họ đứng cho với những nghi thức. –

+1

Tôi cũng nghĩ rằng% có vẻ hơi giống chữ "H" cho băm nếu bạn sử dụng nhiều giấy phép thơ. –

35

Điều này là do Perl sử dụng sigils:

Trong lập trình máy tính, một sigil (phát âm là /'sɪdʒ.ɪl/ hoặc /'sɪg.ɪl/; sigilia số nhiều hoặc sigils) là một biểu tượng được gắn với tên biến, hiển thị kiểu dữ liệu hoặc phạm vi của biến. Cụm từ lần đầu tiên được áp dụng cho việc sử dụng Perl bởi Philip Gwyn vào năm 1999 để thay thế các ký tự "hài hước" " trước một tên biến". Tên là dựa trên từ có nghĩa là một biểu tượng huyền diệu (xem sigil (ma thuật)).

10
  • Bởi vì Perl được dự định để thay thế kịch bản shell, và các biến trong vỏ bắt đầu với $.
  • Để phân biệt giữa các vô hướng ($), mảng (@) và băm (%).
+0

Tôi sẽ không nói perl được dự định để thay thế các kịch bản shell và do đó giữ '$' sigil (biến shell POSIX thực sự được khởi tạo mà không có '$') - lợi ích của '$' sigil là bạn có thể sử dụng/biến nội suy không có quá nhiều mẹo chuyển đổi ngữ cảnh trong mã của bạn, ví dụ 'echo 'giá trị của biến foo là $ foo" '(trái ngược với' System.out.println ("giá trị của foo là" + foo) 'và đó là theo như perl và shell chia sẻ tính phổ biến. Perl's' $ 'sigil là nhiều hơn đến điểm thứ hai của bạn (biểu thị loại biến/sử dụng) – shalomb

2

Không phải tất cả đều làm, một số bắt đầu bằng% (băm) hoặc với @ (mảng).

Đây là quyết định thiết kế để đánh dấu chúng là biến và cũng biểu thị loại của chúng.

Lưu ý rằng bạn có thể có cả số $abc%abc.

Khám phá tutorial on Perl variables.

+1

Các sigils không biểu thị loại.Chúng biểu thị cách bạn xử lý thingy.Ví dụ, $ abc [1] vẫn đang sử dụng biến mảng mặc dù –

+0

Sự không thống nhất đó sẽ được sửa trong Perl6, nơi bạn viết @abc [1] để truy cập phần tử thứ hai trong mảng @abc. – Thilo

+0

Giả sử bất kỳ ai trong chúng ta sống đủ lâu để xem bản phát hành đầy đủ của Perl 6. –

22

Một số lý do là explained bởi Larry Wall et al trong "Lập trình Perl":

Trong bất kỳ không gian tên cho [...] tất cả các loại biến có subnamespace riêng của mình, xác định bởi nhân vật hài hước. Bạn có thể, mà không sợ xung đột, hãy sử dụng cùng tên cho biến vô hướng, mảng hoặc băm (hoặc, cho vấn đề đó, một tệp thủ công, một vấn đề con, nhãn hoặc con thú cưng của bạn.)

[ ...]

Giống như hầu hết các ngôn ngữ máy tính khác, Perl có danh sách các từ dành riêng mà từ đó nhận ra là từ khóa đặc biệt. Tuy nhiên, vì các tên biến luôn bắt đầu bằng một ký tự hài hước, các từ dành riêng không thực sự xung đột với các tên biến.

+3

Điều này làm cho Perl một Lisp 4 (hoặc 5 nếu bạn đếm * GLOB) – dsm

+4

Bảo vệ không gian tên là một lợi ích chính của sigils, IMO. ++! – daotoad

+2

Thực tế là bạn cũng có thể sử dụng các biến trong các "ngữ cảnh" khác nhau khiến mọi thứ trở nên khó hiểu? Điều này không làm cho việc sử dụng cùng một tên cho các biến khác nhau không thể? – temp2290

11

http://www.wall.org/~larry/natural.html:

tiếng Anh sử dụng số và chữ theo thứ tự, dấu ấn của một hệ thống trường hợp trong đại từ: "Người đàn ông nhìn những người đàn ông, và họ nhìn lại anh." Nó hoàn toàn rõ ràng trong câu đó, người đang làm những gì cho ai. Tương tự, Perl có số đánh dấu trên danh từ của nó; có nghĩa là, con chó $ là một con chó, và @dog là (nhiều khả năng). Vì vậy, $ và @ là một chút như "này" và "những" bằng tiếng Anh.

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