2010-01-08 69 views
5

Tôi mới bắt đầu học Perl. Tôi đã xem số beginning perl page và bắt đầu làm việc.Sự khác biệt giữa dấu nháy đơn và dấu ngoặc kép trong Perl là gì?

Nó nói:

Sự khác biệt giữa dấu nháy đơn và dấu ngoặc kép là dấu nháy đơn có nghĩa là nội dung của họ nên được hiểu theo nghĩa đen, trong khi dấu ngoặc kép có nghĩa là nội dung của họ nên được hiểu

khi tôi chạy chương trình này:

#!/usr/local/bin/perl 
print "This string \n shows up on two lines."; 
print 'This string \n shows up on only one.'; 

Nó ra:

 
This string 
shows up on two lines. 
This string 
shows up on only one. 

Tôi có sai ở đâu đó không? phiên bản của perl bên dưới:

perl -v 

This is perl, v5.8.5 built for aix 

Copyright 1987-2004, Larry Wall 

Perl may be copied only under the terms of either the Artistic License or the 
GNU General Public License, which may be found in the Perl 5 source kit. 

Complete documentation for Perl, including FAQ lists, should be found on 
this system using `man perl' or `perldoc perl'. If you have access to the 
Internet, point your browser at http://www.perl.com/, the Perl Home Page. 
+1

Xin vui lòng cho danh hiệu nhiều thông tin hơn cho những câu hỏi của bạn, trong trường hợp này "làm việc như thế chuỗi suy trong Perl với các loại quote khác nhau?". Điều này giúp đúng người xem và trả lời câu hỏi của bạn. –

+3

"một nghi ngờ trong perl": Tiêu đề khủng khiếp! Tôi sẽ chỉnh sửa nó cho một cái gì đó hợp lý. –

+6

Tôi không thể sao chép vấn đề của bạn. Bản in thứ 2 xuất hiện trên một dòng cho tôi, như tôi mong đợi nó sẽ làm. Vui lòng cung cấp thêm thông tin: bạn đang sử dụng hệ điều hành và phiên bản nào của Perl? Hiển thị đầu ra của: perl -v – toolic

Trả lời

15

Tôi có khuynh hướng nói điều gì đó liên quan đến vỏ/thiết bị đầu cuối của bạn và bất kỳ điều gì bạn xuất ra đều diễn giải \ n làm dòng mới và vấn đề không phải với Perl.

Để xác nhận: Điều này có nên không xảy ra (TM) - trong trường hợp đầu tiên tôi sẽ mong đợi để xem một dòng mới chèn, nhưng với dấu nháy đơn nó nên sản lượng theo nghĩa đen những nhân vật \ nkhông một dòng mới.

1

Bằng cách "diễn giải", chúng có nghĩa là tên biến và thứ sẽ không được in mà thay vào đó là giá trị của chúng. \ n là một chuỗi thoát, vì vậy tôi nghĩ rằng nó sẽ không được giải thích.

4

Trong Perl, chuỗi được trích dẫn một lần không mở rộng dấu gạch chéo ngược-thoát như \n hoặc \t. Lý do bạn nhìn thấy chúng được mở rộng có lẽ là do bản chất của vỏ mà bạn đang sử dụng, điều này làm giảm đầu ra của bạn vì một lý do nào đó.

+0

Chúng cũng không làm nội suy thay đổi ("foo là $ bar") – amphetamachine

3

Mọi thứ bạn cần biết về các toán tử trích dẫn và báo giá giống như trong perlop.

Để trả lời câu hỏi cụ thể của bạn, dấu ngoặc kép có thể biến các chuỗi ký tự chữ nhất định thành các ký tự khác. Trong ví dụ của bạn, dấu nháy kép chuyển chuỗi ký tự \n thành ký tự đơn đại diện cho dòng mới. Trong một chuỗi được trích dẫn, cùng một chuỗi chữ đó chỉ là các ký tự \n theo nghĩa đen.

1

Ngoài liên kết O'Reilly của bạn, tài liệu tham khảo không ít có thẩm quyền hơn cuốn sách 'Lập trình Perl' của Larry Wall, cho biết nội suy gạch chéo ngược không xảy ra trong các chuỗi được trích dẫn đơn lẻ.

... much like Unix shell quotes: double quoted string literals are subject to 
backslash and variable interpolation; single quoted strings are not 
(except for \' and \\, so that you may ...) 

Programing Perl, 2nd ed, 1996 page 16 

Vì vậy, nó sẽ là thú vị để xem những gì Perl của bạn không có
in 'đúp xuyệc ngược n: \\ n';

Như trên, vui lòng cho chúng tôi biết kết quả từ 'perl -v'.

Và tôi tin rằng tôi đã nhầm lẫn phần mềm trình biên tập diễn đàn, vì lần cuối Perl 'in' này nên có thụt vào.

+0

nếu tôi viết dưới dạng in '\\ n'; kết quả này '\ n' – Vijay

1

Nếu bạn sử dụng dấu ngoặc kép, nó sẽ được hiểu là \ n làm dòng mới.

Nhưng nếu bạn sử dụng dấu nháy đơn, nó sẽ không diễn giải \ n làm dòng mới.

Đối với tôi, nó hoạt động chính xác.

nội dung tập tin

print "This string \n shows up on two lines."; 
print 'This string \n shows up on only one.' 
Các vấn đề liên quan