2009-12-11 95 views
6

當人們說「Perl非常擅長解析」時,他們的意思是什麼?當人們說「Perl非常擅長解析」時,他們的意思是什麼?

Perl比其他腳本語言(如Python或Ruby)更好還是更強大?

+2

對我來說,這表明他們對分析知之甚少,可能對Python和Ruby等語言知之甚少......更不用說諸如lex/flex和yacc/bison等工具。 它表明它們被固定的正則表達式和從簡單數據格式中提取模式(它們與「解析」相混淆)。 最後,它強烈建議那些人在面對真正的解析問題時,會創建一個半成品和脆弱的代碼,通過他們簡單的炮製測試用例,同時爲那些依賴該代碼進行實際工作的人造成痛苦。 – 2009-12-11 21:03:52

+0

對於人們可能合理地期望用perl手中的那種單調乏味的一次性任務來說,一半的脆弱代碼是完美的*編寫BNF語法來解析日誌文件聽起來並不像很好的利用時間。 – Shog9 2009-12-12 01:16:25

+2

有很多東西沒有語法,Perl給了你很多工具來處理這個問題。正則表達式不是Perl的工具箱中唯一的東西。 – 2009-12-12 01:30:02

回答

18

他們的意思是Perl的最初設計用於處理文本文件,並有許多功能,可以輕鬆:

  • Perl有字符串處理許多功能:substrindexchomplengthgrepsortreverselc,ucfirst,...
  • Perl根據數值的使用方式自動在數字和字符串之間進行轉換。 (例如,您可以從文件中讀取字符串'100'並添加一個字符串,而無需首先執行字符串到整數轉換)
  • Perl會自動處理平臺編碼轉換和平臺編碼轉換(例如Windows上的CRLF)和邏輯換行符(「\ n」)在您的程序中。
  • 正則表達式集成在語法中,而不是單獨的庫。
  • Perl的正則表達式是功能和功能的「黃金標準」。
  • Perl有完整的Unicode支持。

Python和Ruby還具有良好的文本處理功能。 (尤其是Ruby從Perl中獲得了很多靈感,就像Perl從其他許多語言中無恥地借用一樣)。詢問哪個更好,沒有什麼意義。使用你喜歡的。

+7

雖然有些人來自$ _,但我認爲它屬於那個清單。你有一個「當前話題」或你正在做的事情,並應用各種步驟的想法是非常好的。 – 2009-12-11 19:14:51

+1

我不會說Perl自動處理行尾。我認爲你在寫入Windows中的文本文件時感到困惑。除非你告訴Perl該做什麼,否則讀取返回的數據不會做任何特別的事情。 – 2009-12-11 19:15:57

+0

@brian:平臺換行順序和邏輯「\ n」之間的轉換髮生在讀和寫(當然忽略'binmode')。我知道你很清楚這一點,所以我覺得你的評論很混亂。我想我可以說「Perl可以讓你用邏輯換行符來思考,而不用擔心你的操作系統使用的任何順序」而沒有提到它是如何實現的。 – 2009-12-11 19:55:44

1

與C/C++/Java相比,Perl在文本解析方面非常出色。

+8

Igor應該擴展他的回答,注意到當Perl出現時,文本處理不是一項簡單的任務。 20年後,人們並不欣賞現在一切都有PCRE的痛苦,等等。 – 2009-12-11 19:07:38

4

Perl也適用於ETL或批處理運動。這是拿起文件的最小代碼量;通過split推送它以獲得map,在記錄上執行一些邏輯業務操作,並將其寫回到磁盤。

我想這是更多的數據處理,然後數據解析,但數據處理是批量數據解析。

11

不要把Perl的優勢說成是另一種語言的缺陷。 Perl對文本處理非常有用,但這並不意味着Ruby或Python很糟糕。

當人們談論Perl「很好解析」時,他們主要回應Perl的歷史;它是在重型文本處理不容易的當天發明的。試着在C或C++中做一些這樣的事情(Java還沒有被髮明,或者!)。當天,拉里試圖用sed和awk來完成他的工作,但卻遇到了限制。他製作了一個工具,使文本更容易處理。

Perl對文本處理任務來說仍然非常好,但現在很多其他語言也是如此。

0

這可能是因爲人們已經習慣了它的構建內容,如perl documentation中所述,所以許多人將文本文件解析與Perl關聯已成爲司空見慣。不排除Ruby或Python,它只是更多的家喻戶曉的名字恕我直言。

Perl是針對掃描任意文本文件,從這些文本文件中提取信息以及根據該信息打印報告而優化的語言。對於許多系統管理任務來說,這也是一種很好的語言。該語言旨在實用(易於使用,高效,完整)而不是美觀(小巧,優雅,極簡)。

相關問題