2009-06-03 99 views

Trả lời

31

dấu ngoặc kép sử dụng mở rộng khác nhau. Dấu nháy đơn không

trong một chuỗi được trích dẫn kép, bạn cần phải thoát khỏi các ký tự nhất định để ngăn chúng được diễn giải khác nhau. Trong một chuỗi trích dẫn duy nhất bạn làm không (trừ một dấu chéo ngược nếu nó là nhân vật cuối cùng trong chuỗi)

my $var1 = 'Hello'; 

my $var2 = "$var1"; 
my $var3 = '$var1'; 

print $var2; 
print "\n"; 
print $var3; 
print "\n"; 

chí này ra

Hello 
$var1 

Perl Các nhà sư có một lời giải thích khá tốt về điều này here

+0

Bạn có nghĩa là để nói rằng trong singe quote '\\ (' bao gồm 1 ký tự và trong ngoặc kép "\\ (" bao gồm 2 ký tự? – chappar

+6

Không, nó ngược lại. '\\ ('là 2 ký tự và "\\ (" là một. –

+1

Ký tự dấu phân cách cũng phải được gạch chéo ngược và dấu gạch chéo ngược trong các trường hợp khác bên cạnh ký tự cuối cùng của chuỗi (ví dụ: chuỗi ký tự hai \' là '\\\ '', không phải '\\' ') – ysth

3

dấu ngoặc kép đúp giải thích, và nháy đơn không

+0

Ý tưởng là đúng, nhưng bạn không thể sử dụng 42isanumber làm tên biến. –

4

'sẽ không giải quyết các biến và thoát

"sẽ giải quyết các biến, và thoát khỏi nhân vật.

Nếu bạn muốn lưu trữ \ nhân vật của bạn trong chuỗi trong $ var2, sử dụng "\\ ("

+3

s/resolve/interpolate/ –

1

"" Hỗ trợ biến nội suy và thoát. nên bên "\("\ thoát (

đâu là '' không hỗ trợ một trong hai. Vì vậy '\(' là nghĩa đen \(

2

Perl mất các chuỗi đơn trích dẫn 'nguyên trạng' và nội suy các chuỗi dụng dấu ngoặc kép. Nội suy phương tiện, do đó, "\ (" của bạn được hiểu là '(', và regexp của bạn trở thành m/(/, đây là lý do tại sao Perl than phiền.

+0

Trong các chuỗi đơn tiêu đề, nó nhận ra hai ký tự thoát: ký tự dấu phân cách kết thúc và \. – ysth

2

Nếu bạn là sẽ tạo chuỗi regex bạn thực sự nên sử dụng qr// quote-like operator:

my $matchStr = "("; 
my $var1 = qr/\(/; 
my $res1 = ($matchStr =~ m/$var1/); 

Nó tạo ra một regex được biên dịch nhanh hơn nhiều so với chỉ sử dụng biến chứa chuỗi. Nó cũng sẽ trả về một chuỗi nếu không được sử dụng trong ngữ cảnh regex, vì vậy bạn có thể nói những thứ như

print "$var1\n"; #prints (?-xism:\() 
+0

OP có thể muốn đọc các phần perlop trên các toán tử Quotelike: http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators – daotoad

+1

@daotoad Bạn có ý giống như liên kết trong câu trả lời? –

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