2011-12-13 70 views
5

; được sử dụng làm dấu phân cách lệnh, do đó, đặt nhiều ; vào cuối câu lệnh là tốt vì nó chỉ thêm câu lệnh trống.Dấu chấm phẩy Perl ở cuối câu lệnh

Tôi đã xem qua mã này trong đó có nhiều ; ở cuối nhưng xóa chúng gây ra lỗi:

$line =~s;[.,]$;;; 

nên giống như

$line =~s;[.,;]$; 

nhưng nó không phải là. Chuyện gì vậy?

+2

Bạn đã làm nhiều hơn là chỉ xóa dấu chấm phẩy trong câu lệnh thứ hai, bạn đã thêm dấu chấm phẩy ở giữa. –

+5

[s //: "Bất kỳ dấu phân cách không khoảng trắng nào đều có thể thay thế dấu gạch chéo."] (Http://perldoc.perl.org/perlop.html#s%2fPATTERN%2fREPLACEMENT%2fmsixpodualgcer) –

+4

Hiển nhiên ai đã viết nó nghĩ rằng nó có giá trị giải trí cao – Zaid

Trả lời

7

Trong code của bạn chỉ cuối cùng ; là tuyên bố delimiter. Những người khác là regex delimiters mà toán tử thay thế mất. Một cách tốt hơn để viết những dòng này là:

$line =~s/[.,]$//; 

Vì bạn phải có dấu phân cách tuyên bố và delimiters regex trong tuyên bố của bạn, bạn không thể bỏ sót bất kỳ các dấu ;

13

trong đoạn mã do bạn cung cấp ; được sử dụng làm dấu phân tách cho cụm từ thông dụng tìm kiếm-thay thế.

$line =~s;[.,]$;;; 

tương đương với

$line =~ s/[.,]$//; 
+4

Chỉ cần được rõ ràng - có, nó là hợp pháp để làm. Không, bạn không bao giờ nên làm điều đó trong mã của bạn trừ khi bạn muốn có một tâm lý raving để bash đầu của bạn in Và bằng cách raving psychopath Tôi có nghĩa là các nhà phát triển tiếp theo, những người đã duy trì mã của bạn. – DVK

3

Một dấu chấm phẩy không phải là phổ biến một tuyên bố dấu tách; nó cũng có thể là một chuỗi trích dẫn hoặc dấu phân cách regex. Hoặc thậm chí là một tên biến, như trong JAPH cổ điển này bởi Abigail, có tựa đề "Mọi thứ không phải là những gì họ có vẻ như."

$;        # A lone dollar? 
=$";       # Pod? 
$;        # The return of the lone dollar? 
{Just=>another=>Perl=>Hacker=>} # Bare block? 
=$/;       # More pod? 
print%;       # No right operand for %? 
Các vấn đề liên quan