Perl 作為命令列實用程式(轉)
Perl 作為命令列實用程式(轉)[@more@] 那些將 Perl 用作程式語言的人經常忽視了:Perl 用作命令列操作的快速而又難看的指令碼編制引擎時是很有用的。透過命令列,Perl 僅用一行就可以實現大多數其它語言需要數頁程式碼才能完成的任務。跟著 Teodor,他會教給您一些有用的示例。
為了完成這一篇 how-to 文章,您需要在系統上安裝 Perl 5.6.0。您的系統最好安裝比較新(2000 或更新)的 Linux 或 Unix,但是其它作業系統也能照樣工作。所有的示例都使用 tcsh shell(儘管 bash 及其它 shell 也能工作)。雖然這些示例也許可以和較早版本的 Perl、Linux 及其它作業系統一起工作,但是如果它們不能一起工作,那麼它們無法工作的原因可以作為練習,讓讀者去解決。
我想說的第一點是:有經驗的程式設計師不應迴避快速而又難看的解決方案。在其它專欄文章中,我已經強調了文件編制和徹底性。本專欄文章將集中在程式設計的消極面,其中文件編制是可選的,而咖啡因卻無從選擇。因為我們已經身陷其中。
第二點和第一點一樣重要:快速而又難看的解決方案很難正確完成。如果您知道如何記錄、測試和除錯完整的指令碼,那麼您就非常有可能在一行程式中取得成功。如果您不知道怎樣做,那麼這就像是企圖用鯡魚來砍倒紅杉樹(而您的技能就是那條鯡魚)。
第一步,您應該學習 shell 的特性:Unix 將命令列引數傳遞給 Perl 的方式及這些引數的 Perl 解釋方法。
命令列的實質
在 Unix 中您將看到可執行任務的概念,一個程式通常是裝入記憶體的程式。除了初始程式外,程式都可以由其它程式來啟動,初始程式通常是由核心(有時由核心程式)來啟動的。就使用者的觀點而言,啟動程式需要 shell 或啟動程式。因此,當使用者在 shell 命令列輸入"xeyes"或者從啟動程式選單(類似於 GNOME 工作列)選擇 X Eyes 應用程式時,shell 或啟動程式建立新的程式以執行該程式。
程式獲得命令列引數。因此,例如,"perl"和"perl -w"是對同一個程式的兩種不同呼叫。在內部,Perl(類似於 C)將引數傳遞給它用 @ARGV 陣列解釋的指令碼。但是和 C 不同的是,Perl 偷偷地從指令碼中"竊取"其中一些引數以用於自己的用途。例如,正在解釋的指令碼看不到傳給 Perl 直譯器的"-w"引數,除非指令碼看來需要它。shell 用空格字元隔開引數。
傳給 Perl 的"-e"引數告訴 Perl 獲取命令列中"-e"後的任何內容並將它當作指令碼來執行。"-M"參數列示獲取其後的任何內容並將該內容作為模組匯入,類似於正規指令碼中的"use ModuleName"。請參閱 perldoc perlrun 頁面以獲取有關 Perl 必須從命令列提供的開關的更多資訊。
可能最好在這裡舉些示例。根據本專欄文章的精神,讓我們使用一行程式。指令碼的 -MData:umper -e'print Dumper -@ARGV' 部分只是列印出了 @ARGV 陣列的內容。
清單 1. 命令列引數
為了完成這一篇 how-to 文章,您需要在系統上安裝 Perl 5.6.0。您的系統最好安裝比較新(2000 或更新)的 Linux 或 Unix,但是其它作業系統也能照樣工作。所有的示例都使用 tcsh shell(儘管 bash 及其它 shell 也能工作)。雖然這些示例也許可以和較早版本的 Perl、Linux 及其它作業系統一起工作,但是如果它們不能一起工作,那麼它們無法工作的原因可以作為練習,讓讀者去解決。
我想說的第一點是:有經驗的程式設計師不應迴避快速而又難看的解決方案。在其它專欄文章中,我已經強調了文件編制和徹底性。本專欄文章將集中在程式設計的消極面,其中文件編制是可選的,而咖啡因卻無從選擇。因為我們已經身陷其中。
第二點和第一點一樣重要:快速而又難看的解決方案很難正確完成。如果您知道如何記錄、測試和除錯完整的指令碼,那麼您就非常有可能在一行程式中取得成功。如果您不知道怎樣做,那麼這就像是企圖用鯡魚來砍倒紅杉樹(而您的技能就是那條鯡魚)。
第一步,您應該學習 shell 的特性:Unix 將命令列引數傳遞給 Perl 的方式及這些引數的 Perl 解釋方法。
命令列的實質
在 Unix 中您將看到可執行任務的概念,一個程式通常是裝入記憶體的程式。除了初始程式外,程式都可以由其它程式來啟動,初始程式通常是由核心(有時由核心程式)來啟動的。就使用者的觀點而言,啟動程式需要 shell 或啟動程式。因此,當使用者在 shell 命令列輸入"xeyes"或者從啟動程式選單(類似於 GNOME 工作列)選擇 X Eyes 應用程式時,shell 或啟動程式建立新的程式以執行該程式。
程式獲得命令列引數。因此,例如,"perl"和"perl -w"是對同一個程式的兩種不同呼叫。在內部,Perl(類似於 C)將引數傳遞給它用 @ARGV 陣列解釋的指令碼。但是和 C 不同的是,Perl 偷偷地從指令碼中"竊取"其中一些引數以用於自己的用途。例如,正在解釋的指令碼看不到傳給 Perl 直譯器的"-w"引數,除非指令碼看來需要它。shell 用空格字元隔開引數。
傳給 Perl 的"-e"引數告訴 Perl 獲取命令列中"-e"後的任何內容並將它當作指令碼來執行。"-M"參數列示獲取其後的任何內容並將該內容作為模組匯入,類似於正規指令碼中的"use ModuleName"。請參閱 perldoc perlrun 頁面以獲取有關 Perl 必須從命令列提供的開關的更多資訊。
可能最好在這裡舉些示例。根據本專欄文章的精神,讓我們使用一行程式。指令碼的 -MData:umper -e'print Dumper -@ARGV' 部分只是列印出了 @ARGV 陣列的內容。
清單 1. 命令列引數
QUOTE:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-947286/,如需轉載,請註明出處,否則將追究法律責任。
上一篇:
成為Linux的主人(轉)
請登入後發表評論
登入
全部評論
|
相關文章
- 用perl作的ftp(轉)FTP
- perl 命令列模式命令列模式
- 開發 Linux 命令列實用程式(轉)Linux命令列
- 轉:用Perl實現單詞計數器
- 初學練習,用Perl寫的命令列五子棋命令列
- 用 Swift 來寫命令列程式Swift命令列
- ffmpeg 命令列實用總結命令列
- 一個用Perl分析Apache Log的簡單程式(轉)Apache
- 實用的Linux命令列技巧Linux命令列
- 本地除錯PERL CGI程式(轉)除錯
- 【NinGoo】用Perl的hash陣列實現個性化監控Go陣列
- 【江楓】用Perl的hash陣列實現個性化監控陣列
- PhpStorm 中使用 gitbash 作為 terminal 終端命令列PHPORMGit命令列
- 服務計算--使用 golang 開發 開發 Linux 命令列實用程式 中的 selpg作業3GolangLinux命令列
- 編寫友好的命令列應用程式命令列
- 利用命令列將pdf轉換為長圖命令列
- PERL物件程式設計基礎(轉)物件程式設計
- 實用Unix/Linux 命令(轉)Linux
- Perl程式與c程式速度的比較(轉)C程式
- 在命令列開發 Android 應用程式命令列Android
- 用perl訪問mysql資料庫(轉)MySql資料庫
- 用Perl實現郵件傳送
- 玩轉Mysql命令列MySql命令列
- windows命令列工具(轉)Windows命令列
- 最實用的 Linux 命令列使用技巧Linux命令列
- Cultured Perl: 吸引 C 和 Java 程式設計師目光的 Perl 5.6 (轉)Java程式設計師
- perl 實現shell 命令的檔案儲存操作
- mod_perl 程式設計介紹 (轉)程式設計
- python製作命令列工具——firePython命令列
- nuxt作為主應用接入qiankun的實踐(附程式碼)UX
- perl操作二維陣列陣列
- perl 陣列的hash表陣列
- [譯]Perl中的陣列陣列
- 用perl寫的一個watchdog程式
- Dart Pub Global 建立命令列應用程式(Windows)Dart命令列Windows
- perl中呼叫系統命令
- 直接用 java 命令列動態生成jpg檔案 (轉)Java命令列
- 教你用Perl實現Smgp協議協議