2009-12-11 20 views
6

Mọi người có ý gì khi họ nói "Perl phân tích cú pháp rất tốt"?Mọi người có ý gì khi họ nói “Perl rất giỏi phân tích cú pháp”?

Perl tốt hơn hoặc mạnh hơn các ngôn ngữ kịch bản khác như Python hoặc Ruby?

+2

Với tôi, nó cho thấy rằng họ không biết nhiều về phân tích cú pháp và có thể biết ít hơn về các ngôn ngữ như Python và Ruby ... ít hơn nhiều về các công cụ như lex/flex và yacc/bison. Nó cho thấy rằng chúng được cố định bằng các cụm từ thông dụng và trích xuất các mẫu từ các định dạng dữ liệu đơn giản (mà chúng liên kết với "phân tích cú pháp"). Cuối cùng, nó gợi ý rằng những người đó sẽ gặp phải vấn đề phân tích cú pháp thực sự, tạo ra một đoạn mã đơn giản và dễ vỡ để vượt qua các trường hợp thử nghiệm đơn giản trong khi gây đau cho những người phụ thuộc vào mã đó cho công việc thực tế. –

+0

Mã nửa nướng, dễ vỡ là * hoàn hảo * cho các loại công việc tẻ nhạt, một lần mà người ta có thể mong đợi tiếp cận với perl trong tay ... Viết một ngữ pháp BNF để phân tích cú pháp các tệp nhật ký không giống như một sử dụng tốt thời gian. – Shog9

+2

Có rất nhiều thứ không có ngữ pháp, và Perl cung cấp cho bạn rất nhiều công cụ để giải quyết vấn đề đó. Regexes không phải là thứ duy nhất trong hộp công cụ của Perl. –

Trả lời

18

Họ có nghĩa là Perl đầu được thiết kế cho các tập tin xử lý văn bản và có nhiều tính năng mà làm cho nó dễ dàng:

  • Perl có nhiều chức năng cho việc xử lý chuỗi: substr, index, chomp, length, grep, sort, reverse, lc, ucfirst, ...
  • Perl tự động chuyển đổi giữa các số và chuỗi tùy thuộc vào cách sử dụng giá trị. (ví dụ: bạn có thể đọc chuỗi ký tự '100' từ một tệp và thêm chuỗi ký tự vào đó mà không cần phải thực hiện chuỗi để chuyển đổi số nguyên đầu tiên)
  • Perl tự động xử lý chuyển đổi đến và từ mã hóa nền tảng (ví dụ: CRLF trên Windows) và một dòng mới hợp lý ("\ n") trong chương trình của bạn.
  • Cụm từ thông dụng được tích hợp vào cú pháp thay vì là thư viện riêng biệt.
  • Cụm từ thông dụng của Perl là "tiêu chuẩn vàng" cho quyền lực và chức năng.
  • Perl có hỗ trợ Unicode đầy đủ.

Python và Ruby cũng có cơ sở vật chất tốt để xử lý văn bản. (Ruby đặc biệt lấy cảm hứng từ Perl, nhiều như Perl đã không biết xấu hổ mượn từ nhiều ngôn ngữ khác.) Có ít điểm trong việc hỏi cái nào tốt hơn. Sử dụng những gì bạn thích.

+7

Mặc dù một số người từ $ _, tôi nghĩ nó thuộc về danh sách đó. Ý tưởng rằng bạn có một "chủ đề hiện tại" hoặc điều mà bạn đang làm việc và áp dụng các bước khác nhau cho nó là rất tốt đẹp. –

+1

Tôi sẽ không nói rằng Perl tự động xử lý các kết thúc dòng. Tôi nghĩ rằng bạn đang bối rối với việc ghi vào một tập tin văn bản trong Windows. Đọc dữ liệu trở lại không làm bất cứ điều gì đặc biệt trừ khi bạn yêu cầu Perl phải làm gì. –

+0

@brian: Chuyển đổi giữa chuỗi nền tảng dòng mới và một "\ n" hợp lý xảy ra trên cả đọc và viết (bỏ qua 'binmode', tất nhiên). Tôi biết rằng bạn hiểu rõ điều này vì vậy tôi thấy nhận xét của bạn khó hiểu. Tôi cho rằng tôi có thể nói rằng "Perl cho phép bạn suy nghĩ về các dòng mới hợp lý thay vì lo lắng về bất kỳ chuỗi hệ điều hành nào của bạn sử dụng" mà không nhắc đến nó như thế nào. –

1

Perl phân tích cú pháp văn bản rất tốt, khi so sánh với C/C++/Java.

+8

Igor có lẽ nên mở rộng câu trả lời của mình để lưu ý rằng khi Perl đến, xử lý văn bản không phải là một nhiệm vụ tầm thường. 20 năm sau, mọi người không đánh giá cao nỗi đau đó vì mọi thứ đều có PCRE, v.v. –

4

Perl tốt cho ETL hoặc chuyển động xử lý hàng loạt. Đó là một số lượng tối thiểu của mã để nhận các tập tin; đẩy nó qua split để nhận được map, thực hiện một số hành động kinh doanh hợp lý trên hồ sơ và ghi nó ra đĩa.

Tôi cho rằng đó là xử lý dữ liệu nhiều hơn sau đó phân tích dữ liệu, nhưng xử lý dữ liệu là phân tích cú pháp dữ liệu hàng loạt.

11

Đừng lấy tuyên bố về điểm mạnh của Perl để là tuyên bố về các lỗi của ngôn ngữ khác. Perl là tốt cho xử lý văn bản, nhưng điều đó không có nghĩa là Ruby hay Python hút.

Khi mọi người nói về Perl là "tốt cho phân tích cú pháp", họ chủ yếu là lặp lại lịch sử của Perl; nó được phát minh vào ngày xử lý văn bản hạng nặng không dễ dàng. Hãy thử làm một số điều đó trong C hoặc C++ (Java cũng chưa được phát minh). Trở lại trong ngày, Larry đã cố gắng để làm công việc của mình với sed và awk, nhưng chạy vào những hạn chế của họ. Anh ấy đã tạo ra một công cụ giúp văn bản dễ dàng hơn để làm việc.

Perl vẫn rất tốt cho các thao tác thao tác văn bản, nhưng giờ đây có rất nhiều ngôn ngữ khác.

0

Có lẽ vì mọi người quen với những gì được xây dựng, như được mô tả trong perl documentation, vì vậy nó đã trở thành phổ biến cho nhiều người để liên kết phân tích cú pháp các tệp văn bản với Perl. Không loại trừ Ruby hoặc Python, nó chỉ là một tên hộ gia đình IMHO.

Perl là ngôn ngữ được tối ưu hóa để quét các tệp văn bản tùy ý, trích xuất thông tin từ các tệp văn bản đó và in báo cáo dựa trên thông tin đó. Nó cũng là một ngôn ngữ tốt cho nhiều nhiệm vụ quản lý hệ thống. Ngôn ngữ được thiết kế để thực tế (dễ sử dụng, hiệu quả, hoàn chỉnh) thay vì đẹp (nhỏ, thanh lịch, tối thiểu).