2011-11-16 38 views
7

đoạn mã sau đây được lấy từ http://perldoc.perl.org/perlrequick.html#Search-and-replace mang lại cho tôiPerl RegEx cú pháp lỗi

bareword tìm thấy nơi khai thác dự kiến ​​tại dòng blub.pl 2, gần "s/chó/mèo/r"

Có vấn đề gì ở đây? Tôi đang sử dụng Perl 5.12.4 trên Windows XP.

Code:

$x = "I like dogs."; 
$y = $x =~ s/dogs/cats/r; 
print "$x $y\n"; 
+0

Um, chính xác những gì nó nói? 'R' cuối cùng là gì? –

+0

@BrianRoach Đó là công cụ sửa đổi không phá hủy – NullUserException

+0

Erm, ok. SO, tôi đã đúng ... nhưng chỉ vì tôi chưa bao giờ sử dụng perl 5.14 :-D –

Trả lời

10

Bạn đang xem xét tài liệu cho Perl 5.14. Ví dụ đó không xuất hiện trong the documentation for Perl 5.12.

Bạn có thể thấy rằng nó được đánh dấu là tính năng mới trong perl 5.13.2 delta.

Bạn có thể sao chép biến và rồi sửa đổi để đạt được hiệu quả tương tự trong các phiên bản cũ hơn của Perl.

$x = "I like dogs."; 
$y = $x; 
$y =~ s/dogs/cats/; 
print "$x $y\n"; 

Hoặc bạn có thể sử dụng thành ngữ "một lót":

$x = "I like dogs."; 
($y = $x) =~ s/dogs/cats/; 
print "$x $y\n"; 
+3

Đây là một ví dụ hoàn hảo về lý do tại sao mọi người không nên đọc tài liệu của Perl trên mạng nội bộ. Thay vào đó, bạn nên đọc tài liệu của Perl trên hệ thống nơi bạn sẽ chạy perl. Sau đó, bạn không bao giờ phải chịu sự thay đổi của phiên bản không khớp và tròn! – tadmc

+3

@tadmc: Bạn có thể ít nhất (cẩn thận) chọn phiên bản Perl cho tài liệu [tại đây] (http://perldoc.perl.org/) – JRFerguson

2

Tôi đang sử dụng cùng một phiên bản (trên Linux) và nhận được lỗi tương tự cộng với

không thể viện chứng chuỗi "r" có thể xung đột với từ dành riêng trong tương lai

và nó hoạt động khi tôi xóa r. Hướng dẫn đó là từ 5.14, có thể là tính năng r chưa được triển khai trong 5.12.