幾乎每個(gè) Perl 程序都如此開(kāi)始:
#!/usr/bin/perl
這是 UNIX 結(jié)構(gòu),它告訴 Shell 直接執(zhí)行余下的輸入程序文件。
你可以在此行添加 Perl 的任何命令行選項(xiàng),它們將成為選項(xiàng)之后命令行的一部分。 如果你有一個(gè)程序包含:
#!/usr/bin/perl -T
然后執(zhí)行:
perl -l program.pl
-l
?和?-T
?兩個(gè)選項(xiàng)都會(huì)使用,但?-l
?將先用。在?perlrun?文檔中介紹 了 Perl 的命令行選項(xiàng)。此處只介紹最有用的內(nèi)容。
Perl 允許你在?taint
?模式執(zhí)行。在此模式中,變量在使用前需要“消毒”,以 應(yīng)對(duì)不安全的操作。
何為不安全?
如果你沒(méi)有“去污”數(shù)據(jù),那么這些操作將是程序中的嚴(yán)重錯(cuò)誤。
如何去污?使用正則表達(dá)式匹配有效的值,然后將匹配賦給變量。
my ($ok_filename) = $filename =~ /^(\w+\.log)$/;
你應(yīng)當(dāng)達(dá)到程序?taint
?安全的目的。
此命令行選項(xiàng)允許檢查給定文件的語(yǔ)法錯(cuò)誤。它也會(huì)執(zhí)行?BEGIN
?塊中的任意 代碼,并檢查程序中已使用的模塊。
你應(yīng)當(dāng)使用?-c
?在每次更改后檢查代碼的語(yǔ)法。
該選項(xiàng)允許你從命令行執(zhí)行代碼,以代替將程序?qū)懭胛募?lái)執(zhí)行。
$ perl -e 'print "1\n"'
1
這對(duì)小程序、快速計(jì)算、以及與其他選項(xiàng)組合使用非常有用。
Perl 的?-n
?選項(xiàng)允許你針對(duì)標(biāo)準(zhǔn)輸入的每行重復(fù)執(zhí)行代碼(通常使用?-e
?指定)。 這些是等效的:
$ cat /etc/passwd | perl -e 'while (<>) { if (/^(\w+):/) { print "$1\n"; } }'
root
...
$ cat /etc/passwd | perl -n -e 'if (/^(\w+):/) { print "$1\n" }'
root
...
-p
?選項(xiàng)與?-n
?相同,除了它在每行后打印?$_
。
如果你組合?-i
?選項(xiàng),Perl 將就地編輯你的文件。因此,要將一堆文件從 DOS 轉(zhuǎn)換成 UNIX 換行,你可以這樣干:
$ perl -p -i -e 's/\r\n/\n/' file1 file2 file3
Perl 的?-M
?選項(xiàng)使你可以從命令行使用模塊。有好些模塊首選此方式運(yùn)行(如?_CPAN_和?Devel::Cover)。如果你需要使用?-e
?包含模塊,它也是習(xí)慣的 簡(jiǎn)寫。
$ perl -e 'use Data::Dumper; print Dumper( 1 );'
$VAR1 = 1;
$ perl -MData::Dumper -e 'print Dumper( 1 );'
$VAR1 = 1;
試試從命令行加載模塊。-e1
?只是一個(gè)立即退出的空程序。如果你獲得錯(cuò)誤, 那么該模塊未被安裝:
$ perl -MWWW::Mechanize::JavaScript -e 1
Can't locate WWW/Mechanize/JavaScript.pm in @INC...
BEGIN failed--compilation aborted.
$
返回沒(méi)有錯(cuò)誤則意味著該模塊已安裝。
$ perl -MWWW::Mechanize -e 1
$
當(dāng)它存在時(shí),檢查版本:
$ perl -MWWW::Mechanize -e'print $WWW::Mechanize::VERSION'
并非所有模塊都有?$VERSION
?變量,因此這可能不總是工作。
更多建議: