2012-01-18 69 views
17

thể trùng lặp:
When should I use the & to call a Perl subroutine?Sự khác nhau giữa & chức năng và function() trong perl

Trong kịch bản perl, tại sao là phương pháp gọi hàm được viết khác đi một số lần. Tôi thấy hàm & và đôi khi hàm(). Cả hai đều giống nhau và đây chỉ là một phong cách mà người ta muốn phô trương? Nếu họ là như nhau, tại sao cả hai đều có sẵn, sẽ không chỉ đủ? Tôi đoán có một số khác biệt ngữ nghĩa giữa cả hai phương pháp phân biệt chúng với nhau ... nhưng ở loại hoàn cảnh nào?

--- Vì tôi không thể trả lời câu hỏi của riêng mình vì lý do hết giờ - tôi đang cập nhật câu trả lời trong phần câu hỏi. Khi tôi có cơ hội cập nhật khối câu trả lời, tôi sẽ đặt nó ở đó.

Tôi đã tìm thấy văn bản có liên quan trong sách 'Học Perl'..thanks for the tip. Chương 4: Các chương trình con - Bỏ qua các ký hiệu.

Tôi quan tâm nhiều hơn đến dấu và & cách sử dụng cho các chức năng perl. Nếu một chương trình con đã được định nghĩa trước khi được gọi, thì chương trình con có thể được gọi mà không cần sử dụng & trong khi gọi hàm tương tự như gọi các hàm dựng sẵn. & cũng được sử dụng để phân biệt giữa hàm dựng sẵn và hàm do người dùng xác định nếu hàm được gọi sử dụng cùng tên của một hàm dựng sẵn, miễn là nó được xác định trước khi được gọi.

Việc sử dụng(), chỉ là để biện minh cho việc chuyển các đối số cho các chương trình con, trong khi nếu không được sử dụng, danh sách mặc định các đối số hiện tại được chuyển trong biểu mẫu @_. Nếu các đối số được xác định trong() cho một chương trình con, nó được giả định là một chương trình con và được gọi ngay cả khi không được định nghĩa trước đó trong khi phân tích cú pháp.

+11

Xem [Sự khác biệt giữa gọi hàm là & foo và foo()?] (Http://perldoc.perl.org/perlfaq7.html#What%27s-the-difference-between-calling-a-function -as-% 26foo-and-foo% 28% 29% 3F) trong Câu hỏi thường gặp Perl 7. – manatwork

+0

hi @manatwork, giải thích sự khác biệt giữa & foo và & foo() nhưng tại sao ký hiệu và được sử dụng ở tất cả nếu không cần thiết ... khi nó có cần thiết không? –

+0

Trong phần Mô tả [perlsub] (http://perldoc.perl.org/perlsub.html) liệt kê khi nào là '&' tùy chọn. – manatwork

Trả lời

4

Như đã đề cập bởi @manatwork và @KeithThompson bạn có thể tìm kiếm thông tin trong các bài viết:

  1. Một mô tả chung - What's the difference between calling a function as &foo and foo()?
  2. thông tin về việc sử dụng tinh tế & hay không cho một cuộc gọi chức năng - perlsub: Perl Subroutines: Description.
+0

Trong trường hợp bạn đang tự hỏi về một-char của tôi. chỉnh sửa: Câu trả lời của bạn _rendered_ với URL được mã hóa URL không chính xác (mặc dù nó đã chính xác trong nguồn Markdown), khiến phần neo của "Sự khác biệt ..." không hoạt động chính xác (một được đặt ở đầu trang mục tiêu dài thay vì tại vị trí ưa thích). Tôi nghi ngờ đây là lỗi _historical_ Markdown-rendering đã được sửa cho câu trả lời _new_. Bằng cách buộc câu trả lời của bạn được lưu lại, vấn đề đã biến mất. – mklement0

18

Nó có công dụng rất cụ thể:

  • & nói Perl để bỏ qua nguyên mẫu của tiểu.
  • & có thể cho phép bạn sử dụng số gọi @_ của người gọi. (&foo; không có dấu ngoặc hoặc đối số).
  • goto &foo;defined &foo.
  • Tham khảo (ví dụ: \&foo).

Một số người (chủ yếu là người mới bắt đầu) sử dụng nó để phân biệt người dùng phụ từ các hàm dựng sẵn, vì hàm dựng sẵn không thể đứng trước &.

+0

Có cách nào khác để phân biệt người dùng phụ từ nội trang? – jackthehipster

+2

@jackthehipster, Quy ước đặt tên, mặc dù tôi đặt câu hỏi về sự cần thiết của nó. Ai quan tâm ai đã viết nó. Có quan trọng là 'utf8 :: encode' là một nội trang dựng sẵn và' Mã hóa :: encode_utf8' không phải là? – ikegami

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