2009-06-03 19 views

Odpowiedz

31

Podwójne cudzysłowy użyć zmiennej ekspansji. pojedyncze cudzysłowy nIE

w A podwójnie cytowany ciąg znaków, aby uciec od pewnych znaków, aby zapobiec ich różnej interpretacji. W pojedynczym cudzysłowie nie robić (oprócz backslashem jeśli jest to ostateczny znak w łańcuchu)

my $var1 = 'Hello'; 

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

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

Będzie to wyjście

Hello 
$var1 

Perl Monks ma dość dobre wyjaśnienie tego here

+0

Chcesz powiedzieć, że w pojedynczym cudzysłowie "\\ (" składa się z 1 znaku i podwójnego cudzysłowu "\\ (" składa się z 2 znaków? – chappar

+6

Nie, jest odwrotnie. '\\ ("ma 2 znaki, a" \\ ("to jeden. –

+1

Znak ogranicznika musi również zawierać odwrotny ukośnik i ukośnik odwrotny w różnych innych przypadkach oprócz ostatniego znaku ciągu (np. ciąg znaków \ ​​'jest \\\ '', a nie '\\' '). – ysth

3

cudzysłów interpretacji i pojedynczy cytat nie

+0

Pomysł jest właściwy, ale nie możesz użyć 42isanumber jako nazwy zmiennej. –

4

"nie rozwiąże zmienne i ucieka

" rozwiąże zmienne, i uciec znaków.

Jeśli chcesz zapisać \ charakter w ciągu w $ vAR2, użyj „\\ (”

+3

s/resolve/interpolate/ –

1

"" Obsługuje interpolację zmiennych i ucieczkę. tak wewnątrz "\("\ ucieczek (

Gdzie jako „” nie obsługuje albo. Więc '\(' jest dosłownie \(

2

Perl bierze pojedynczych cudzysłowów „jak jest” i interpoluje podwójnych cudzysłowów. Interpoluj środki, że zastępuje zmienne wartościami zmiennymi, a także rozumie znaki zbiegunowe.Tak więc "\ (" jest interpretowane jako "(", a regexp staje się m/(/, dlatego Perl narzeka:

+0

W pojedynczych cudzysłowach rozpoznaje dwa znaki ze znakami escape: końcowy znak ogranicznika i \. – ysth

2

Jeśli jesteś tworząc ciągi regex powinieneś naprawdę używać qr// quote-like operator:

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

Tworzy skompilowane wyrażenie regularne, które jest znacznie szybsze niż użycie zmiennej zawierającej ciąg. Zwróci również ciąg znaków, jeśli nie zostanie użyty w kontekście wyrażeń regularnych, więc możesz powiedzieć takie rzeczy, jak

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

OP może chcieć przeczytać fragmenty na temat operatorów Quotelike: http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators – daotoad

+1

@daotoad Masz na myśli link w odpowiedzi? –

Powiązane problemy