2012-02-05 28 views
7

Tôi đã có một kịch bản perl với một cái gì đó như sau:perl @ thoát chuỗi

" \"blah\@$string;blah\" " 

Nhưng tôi không chắc chắn những gì \@ đang làm/phải làm.

Tôi đã thử googling '\@' nhưng tôi dường như không thể tìm thấy bất cứ điều gì.

+0

Không thực sự là một câu trả lời, nhưng cá nhân tôi muốn viết rằng chuỗi như 'qq [ "blah \ @ $ string; blah "]' để tránh sự cần thiết phải thoát khỏi dấu ngoặc kép ở đầu. Trong Perl, qq [] giống như "" và bạn có thể chọn các dấu phân cách bạn thích: qq [], qq(), qq {}, qq //, qq ^^, qq !!, qq ||, v.v ... . – zostay

Trả lời

19

Nó gây ra @ có nghĩa là "An tại dấu" thay vì "Dereference $string làm mảng".

6

Dấu gạch chéo ngược trước @ yêu cầu Perl xử lý theo nghĩa đen, nếu không nó sẽ coi nó là một mảng. Nếu @ được theo sau là $, nó sẽ được coi là tham chiếu mảng (chuỗi giữ tham chiếu đến mảng). Nếu bạn in nó ra nó có thể được rõ ràng hơn (Tôi đã thay đổi mã của bạn để sử dụng qq||):

my $string = 'i-am-a-string'; 

print qq| "blah\@$string;blah" |; # with backslash 
# "[email protected];blah" 

print qq| "[email protected]$string;blah" |; # no backslash 
# Can't use string ("i-am-a-string") as an ARRAY ref 

$string = [1,2,3]; # string now an array reference 

print qq| "blah\@$string;blah" |; # with backslash 
# "[email protected](0x803bc0);blah" # ARRAY(0x803bc0) is where (1,2,3) lives 

print qq| "[email protected]$string;blah" |; # no backslash 
# "blah1 2 3;blah" 
Các vấn đề liên quan