$_
?是默認(rèn)變量。它常用于內(nèi)置函數(shù)的默認(rèn)參數(shù)。
while ( <> ) { # Read a line into $_
print lc; # print lc($_)
}
這與下列代碼相同:
while ( $it = <> ) {
print lc($it);
}
$0
?包含執(zhí)行程序的名稱,正如給 Shell 的一樣。如果程序直接通過 Perl 解釋器執(zhí)行,那么?$0
?包含文件名稱。
$ cat file.pl
#!/usr/bin/perl
print $0, "\n";
$ ./file.pl
file.pl
$ perl file.pl
file.pl
$ perl ./file.pl
./file.pl
$ cat file.pl | perl
-
$0
?是 C 程序員期望從?argv
?數(shù)組找到的第一個(gè)元素。
@ARGV
?包含給程序的參數(shù),順序與 Shell 中一樣。
$ perl -e 'print join( ", ", @ARGV), "\n"' 1 2 3
1, 2, 3
$ perl -e 'print join( ", ", @ARGV), "\n"' 1 "2 3" 4
1, 2 3, 4
C 程序員可能會(huì)搞混,因?yàn)?$ARGV[0]
?是他們的?argv[1]
。不要犯這樣的錯(cuò)。
@INC
?包含 Perl 搜索模塊的所有路徑。
Perl 程序員通過后置或前置到?@INC
?添加庫(kù)路徑。眼下,使用?use lib
?代替。 下面的代碼等效:
BEGIN { unshift @INC, "local/lib" };
use lib "local/lib";
%ENV
?包含當(dāng)前環(huán)境的拷貝。該環(huán)境由 Perl 創(chuàng)建的子 Shell 所給予。
這對(duì)?taint
?模式很重要,%ENV
?具有能修改 Shell 行為的內(nèi)容。正因如此, perlsec 推薦在?taint
?模式執(zhí)行命令時(shí)使用下列代碼:
$ENV{'PATH'} = '/bin:/usr/bin'; # change to your real path
delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
Perl 具有豐富的信號(hào)處理能力。使用?%SIG
?變量,你能夠在當(dāng)信號(hào)發(fā)送給運(yùn)行 的進(jìn)程時(shí)執(zhí)行任意子例程。
如果你有耗時(shí)進(jìn)程,這將特別有用。通過發(fā)送信號(hào)(通常是?SIGHUP
)來(lái)重載配置 ,你不必啟動(dòng)和停止進(jìn)程。
通過分別賦值?$SIG{__DIE__}
?和?$SIG{__WARN__}
,你也可以更改?die
?和?warn
?的行為。
鉆石操作符?<>
?用于程序期望的輸入時(shí),而不用關(guān)心它如何到達(dá)。
如果程序收到任何參數(shù),它們將分成文件名及其內(nèi)容發(fā)送給?<>
。否則,使用標(biāo)準(zhǔn) 輸入(STDIN
)。
<>
?對(duì)于過濾程序特別有用。
<DATA>
和DATA如果程序包含自身為一行的魔法標(biāo)記?__DATA__
,那么它下面的任何東東均可通過 魔法<DATA>
?句柄為程序所用。
如果你想在程序中包含數(shù)據(jù),但又想與主程序邏輯分開,那么這將特別有用。
當(dāng)使用?system
?執(zhí)行命令時(shí),如果命令返回非真狀態(tài),那么?$!
?將為真。否則, 可能未被執(zhí)行。$!
?將包含出錯(cuò)消息。
如果使用?eval
,那么?$@
?將包含?eval
?所拋出的語(yǔ)法錯(cuò)誤。
更多建議: