2012-09-14 19 views
5

Trạng thái tài liệu Perl:Cách sử dụng cờ/r trong regex Perl?

e Evaluate 'replacement' as an expression 
r Return substitution and leave the original string untouched. 

là cờ sẵn dùng để sử dụng trong các mẫu thay thế. Khi tôi chuyển cờ r cho mẫu thay thế của mình, nó được hiểu là lỗi cú pháp. Tôi đang chạy Perl 5.8.8. Có thể nó không được hỗ trợ trong phiên bản Perl của tôi không? Ngoài ra, ai đó có thể cung cấp ví dụ làm việc về cách sử dụng cờ và cách gọi thay thế mới được tạo ra?

Trả lời

15

Có lẽ bạn nên đọc tài liệu cho 5.8.8, sau đó?/r đã được thêm vào 5,14!

Trong 5.8.8, bạn có thể làm tương đương với

s/foo/bar/r 

với

do { (my $s = $_) =~ s/foo/bar/; $s } 

tập quán Mẫu s /// r:

print "abba" =~ s/b/!/rg;   # Prints a!!a 

my $new = $old =~ s/this/that/r; # Leaves $old intact. 

my $trimmed = $val =~ s/^\s+//r =~ s/\s+\z//r; 
my $trimmed = (($val =~ s/^\s+//r) =~ s/\s+\z//r); # Same as previous 
+0

Có thể bạn chỉ cách gọi nó trong 5.14. Tôi đang bối rối về cách nó trả về một biến khác nhau, nhưng bạn vẫn phải ghi chú biến để chạy nó. Ví dụ: $ var = ~ s/this/that/r; Biến mới được lưu ở đâu? – user1671989

+0

@ user1671989, Nó được trả lại. «In» abc "= ~ s/b /!/Rg;' »in« 'a! C'». – ikegami

+0

Vì vậy, nếu nó được trả lại và tôi gọi nó là $ var = ~ s/this/that/r; nó thực sự sẽ ghi đè $ var? Làm cách nào để chạy nó trên $ var và trả về $ new_var? Xin lỗi vì đã là một noob, gặp rắc rối khi quấn đầu quanh nó. – user1671989

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