2012-08-14 30 views
7

thể trùng lặp:
Help me understand this Perl statement with <<'ESQ'Bản in << EOF; và nó hoạt động như thế nào?

được báo cáo kết quả trong https://stackoverflow.com/questions/4151279/perl-print-eof làm gì chính xác? Tôi đã xem qua bài viết trước nhưng không hiểu những gì anh ta đang cố giải thích. Đó là gì PETE? Bất cứ ai có thể giải thích mọi dòng? Mã hoạt động như thế nào?

print <<EOF; 
This is 
a multiline 
string 
EOF 

print <<PETE; 
This is 
a multiline 
string 
PETE 

Sự khác biệt và tương đồng giữa hai loại này là gì? Thay cho PETE Tôi đã sử dụng nhiều từ khác như DOG và nó hoạt động giống nhau mỗi lần.

Trả lời

20

Đây được gọi là tài liệu tại đây. Về cơ bản nó lấy tất cả mọi thứ từ dòng tiếp theo cho đến khi một dòng đánh dấu kết thúc và trình bày rằng như là đầu vào tiêu chuẩn cho chương trình bạn đang chạy. Dòng đánh dấu kết thúc được kiểm soát bởi văn bản sau <<.

Như một ví dụ, trong bash (mà tôi quen thuộc hơn với hơn Perl), lệnh:

cat <<EOF 
hello 
goodbye 
EOF 

sẽ chạy cat và sau đó gửi hai dòng để đầu vào tiêu chuẩn của nó (xin chào và tạm biệt dòng). Perl cũng có tính năng này mặc dù cú pháp hơi khác (như bạn mong đợi, với một ngôn ngữ khác). Tuy nhiên, nó đủ gần để lời giải thích vẫn giữ.

Wikipedia có số an entry for this mà bạn có thể đã tìm thấy khi bạn biết nó được gọi là tài liệu ở đây, nhưng nếu không sẽ khó tìm ra.

Trong những trường hợp cụ thể của bạn, không có sự khác biệt giữa việc sử dụng EOFPETE, có một mối quan hệ giữa các điểm đánh dấu heredoc (bit sau <<) và kết thúc đầu vào tiêu chuẩn.

Ví dụ, nếu một trong những dòng đầu vào của bạn là EOF, bạn có thể không thực sự sử dụng như là một dấu hiệu từ đầu vào tiêu chuẩn sẽ được chấm dứt sớm:

cat <<EOF 
This section contains the line ... 
EOF 
but then has more stuff 
and this line following is the real ... 
EOF 

Trong trường hợp đó, bạn có thể sử dụng PETE (hoặc bất kỳ thứ gì khác không xuất hiện trong văn bản trên dòng riêng của nó).

Có các tùy chọn khác như sử dụng dấu ngoặc kép xung quanh điểm đánh dấu (để thụt đầu dòng có thể trông đẹp hơn) và sử dụng dấu nháy đơn hoặc kép để kiểm soát thay thế biến.

Nếu bạn truy cập trang perlop và tìm kiếm <<EOF, hy vọng tất cả sẽ trở nên rõ ràng.

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