perl - Practical Extraction and Report Language,Perl有很多命令行參數(shù),通過它可以讓你的程序更簡練,并且可以寫出很多只有一行命令的perl。在這篇文章里我們來了解一些常用的命令行參數(shù)。
命令行調(diào)用
[開關(guān)項描述]
-0
規(guī)定記錄分隔符。
-0<數(shù)字>
(用8進(jìn)制表示)指定記錄分隔符($/變量),默認(rèn)為換行
-00
段落模式,即以連續(xù)換行為分隔符
-0777
禁用分隔符,即將整個文件作為一個記錄
-a
與 -n 或者 -p 一起使用,負(fù)責(zé)打開自動拆分模式,用于對空白字符進(jìn)行隱式拆分,用空格分隔$_并保存到@F中,相當(dāng)于@F=split ''。分隔符可以使用-F參數(shù)指定例如:
-c
只檢查 Perl 腳本語法,而不執(zhí)行腳本。
-d
對腳本打開 Perl調(diào)試器。
-D
設(shè)置 Perl 的調(diào)試標(biāo)記(請先檢查 Perl 的安裝情況,確保已經(jīng)安裝了調(diào)試器),若要觀察 Perl 是如何執(zhí)行腳本的,可使用 -D14。
-e command
用于再命令行而不是在腳本中執(zhí)行 Perl 命令。
-F pattern
規(guī)定拆分輸入行時使用的模式。模式是位于斜杠、單引號或雙引號之間的正則表達(dá)式。例如,-F/:+/ 表示在一個或多個冒號上拆分輸入行,如果 -a 仍然起作用的話,則打開它。
-h
打印 Perl 的命令選項列表。
-i extension
在使用 <> 循環(huán)遍歷文件時啟用原位編輯模式。 如果沒有規(guī)定擴(kuò)展名的話,則原位修改各行內(nèi)容,否則使用擴(kuò)展名來修改輸入文件名(以便充當(dāng)備份文件),并使用原位編輯的原文件名創(chuàng)建輸出文件。 這也是所有 print 語句選擇的文件句柄。
-I directory
與 -P選項一起使用,負(fù)責(zé)告訴 C 預(yù)處理程序查找包含的文件,其默認(rèn)目錄包括 /usr/included、/usr/lib/perl 以及當(dāng)前目錄。
-1 digits
啟用自動行結(jié)束處理。如果使用了 -n 或者 -p 選項,則去掉終止符。把位數(shù)(八進(jìn)制) 賦值給 $/ ,并將行終止符添加到 print 語句中。如果沒有規(guī)定位數(shù)的話,則將 $/ 設(shè)置為 $/ 的當(dāng)前值。
-l
對輸入內(nèi)容自動chomp,對輸出內(nèi)容自動添加換行。使用 -l 有兩個效果,第一自動 chomp 輸入分隔號,第二 把$/ 值付給 $/ (這樣 print 的時候就會自動在末尾加 /n)
在執(zhí)行 Perl 腳本之前執(zhí)行 use 方法。
-M module
再執(zhí)行 Perl 腳本之前執(zhí)行 use 方法。如果添加附加的文本,則可使用引號。方括號中的短橫線表示把 use 指令替換為 no。
-n
使 Perl 隱式地循環(huán)遍歷指定的文件,并只打印規(guī)定的行。自動循環(huán),相當(dāng)于 while(<>) { 腳本; }
-p
使 Perl 隱式地循環(huán)遍歷指定的文件,同時打印所有的行。自動循環(huán)+自動輸出,相當(dāng)于 while(<>) { 腳本; print; }
-P
使要運(yùn)行的腳本在 Perl 編譯之前通過 C 預(yù)處理程序。
-s
再腳本名之后、文件名參數(shù)之前啟用開關(guān)項解析,并從@ARGV 數(shù)組中刪除所有找到的開關(guān)項。將開關(guān)項設(shè)置為同名的標(biāo)量型變量,并將標(biāo)量賦值為 1 。例如,-abc 在腳本中將轉(zhuǎn)換為 $abc。
-S
如果不支持 #!/usr/bin/perl 行,則讓 Perl 在 PATH 環(huán)境變量中搜索腳本。
-T
強(qiáng)制打開“污染“ 檢查,用于測試腳本,一般只用在 setuid 或 setgid 程序上。推薦自行檢查 CGI 腳本。
-u
編譯后產(chǎn)生腳本的核心轉(zhuǎn)儲(基于 UNIX 系統(tǒng))。
-U
允許 Perl 執(zhí)行不安全的操作,如果是超級用戶的話,則斷開目錄鏈接。
-v
打印 Perl 的版本信息。
-V
打印最重要的 Perl 配置項和數(shù)組 @INC 中當(dāng)前值的匯總。
-V:NAME
打印 NAME 的值,其中 NAME 是配置變量。
-w
打印警告信息,包括錯誤使用保留字、文件句柄、子例程等情況。
-W
啟用所有警告,而不論是否已經(jīng)用 no warnings 關(guān)閉了本地警告。
-x directory
忽略 #!/usr/bin/perl 行之前的任何文本。如果將目錄名當(dāng)作 -x 開關(guān)的參數(shù),則 Perl 會在開始執(zhí)行腳本之前自動切換到該目錄。
-X
關(guān)閉所有警告。
每一行將缺省保存在 $_,-p 和 -n 一樣,但是還會打印 $_ 的內(nèi)容。
請注意:-p 開關(guān)和 -n 開關(guān)的使用。當(dāng)您想顯式打印數(shù)據(jù)時,使用 -n 開關(guān)。-p 開關(guān)隱式地將 print $_ 語句插入到 -n 開關(guān)所產(chǎn)生的循環(huán)中。因此,-p 開關(guān)更適用于對文件進(jìn)行的完全處理,而 -n 開關(guān)更適用于選擇性文件處理,這樣的處理只需打印特定數(shù)據(jù)。
安全網(wǎng)參數(shù)
有三個參數(shù)我認(rèn)為可以起到“安全網(wǎng)”的作用,因為它們可以讓你避免犯錯,特別是當(dāng)你在使用 Perl 嘗試一些特別聰明(或這愚蠢)的想法時,錯誤難免會發(fā)生。有經(jīng)驗的 Perl 程序員常常使用這三個參數(shù)來提前找到錯誤所在。
-c 是第一個。這個參數(shù)編譯 Perl 程序但并不真正運(yùn)行它,由此檢查所有語法錯誤,每次修改 perl 程序之后我都會立刻使用它來找到任何語法錯誤。
這保證了程序依然可以編譯。很顯然,當(dāng)你輸入一小段代碼之后立即進(jìn)行檢查,比起一下子輸入幾百行代碼然后開始 debug 要容易很多。
-W 是第二個參數(shù)。它會提示你任何潛在的bug。Perl 5.6.0 之后的版本已經(jīng)用 use warnings; 替換了-w。你應(yīng)該使用 use warnings 因為它要比 -w 更靈活。
-T 是第三個參數(shù)。它讓 perl 出于了 taint 模式中。在這個模式里,Perl 會質(zhì)疑任何程序外傳來的數(shù)據(jù)。例如從命令行讀取,外部文件里讀取或是 CGI 程序里傳來的數(shù)據(jù)。這些數(shù)據(jù)在 -T 模式里都會被 Tainted(污染),Tainted 數(shù)據(jù)不可以被用來和外部交互。例如使用在 system 調(diào)用和用作 open 的文件名,關(guān)于什么數(shù)據(jù)會被Tainted,請參閱perlsec 文檔,那里有一個完整的列表。
要想使用 Tainted 的數(shù)據(jù)就必須 untaint這個數(shù)據(jù)。untaint是通過正則表達(dá)式來實(shí)現(xiàn)的,關(guān)于 taint 本身的內(nèi)容足夠?qū)懸黄獑为?dú)的文章,所以這里我不會太多的講述 taint 模式。如果你要編寫的程序(例如 CGI 程序)需要從從用戶那里接受不可知的輸入,我推薦使有 taint 模式。
還有一個值得一提的參數(shù)是 -d,它將讓 Perl 處于 Debugger 模式。這個話題內(nèi)容非常多,我推薦閱讀文檔 ‘perldoc perldebug'或 Richard Foley 的 Perl Debugger Pocket Reference 一書.
使用模塊
下面的幾個 Perl 參數(shù)可以讓短小的 Perl 程序很容易的在命令行上運(yùn)行,-e 可以讓 Perl代碼在命令行上被編譯器直接執(zhí)行。例如,我們可以直接在命令行上運(yùn)行“Hello World” 程序而不用把它寫稱 Perl 程序。
多個 -e 也可以同時使用,運(yùn)行順序根據(jù)它出現(xiàn)的位置。
象所有的 Perl 程序一樣,只有程序的最后一行不需要以 ; 結(jié)尾,你也可以用 -e 來引用模塊,但 -M 讓它變得更容易。
-M模塊名和use 模塊名一樣。有些模塊有默認(rèn)的模塊導(dǎo)入,如果你不想導(dǎo)入它們,你可以使用-m。-m模塊名和 use module() 一樣,關(guān)閉了默認(rèn)的導(dǎo)入。例如下面這個例子,因為 head 函數(shù)是默認(rèn)導(dǎo)入,而使用-m 時就不會執(zhí)行,結(jié)果是沒有輸出。
-m 和 -M 有很多方便的語法來幫助你使用它們,你可以在 = 后面列出對 use 的各種參數(shù)。
在這里,CGI.pm 的 :standard 被引入,header 函數(shù)因此可以使用。要引入多個參數(shù)可以通過使用引號和逗號。
這里我們引入了 header 和 start_html 函數(shù)。
Implicit Loops
-n 和 -p 增加了循環(huán)的功能,使你可以一行一行來處理文件。
這與下面的程序一樣.
LINE:
注意:打開命令行里的文件,一行行的讀取,每一行將缺省保存在 $_。
上面的這一行可以寫成 LINE: while () { print ”$. 主站蜘蛛池模板: 北海市| 嘉善县| 乾安县| 抚远县| 海城市| 晋江市| 门头沟区| 象山县| 宝山区| 渭南市| 临高县| 响水县| 澄迈县| 萨迦县| 上犹县| 错那县| 田东县| 林甸县| 宁陵县| 本溪| 大渡口区| 奇台县| 崇礼县| 孝昌县| 六盘水市| 城口县| 陆良县| 葫芦岛市| 施甸县| 鄂托克前旗| 山东省| 云梦县| 孟州市| 佛山市| 阜康市| 襄城县| 华蓥市| 五峰| 正镶白旗| 浠水县| 聂拉木县|