程序名:$0
$0
表示當前正在運行的Perl腳本名。有3種情況:
- 如果執行方式為
perl x.pl
,則$0
的值為x.pl
而非perl命令本身 - 如果執行方式為
./x.pl
,則$0
的值為./x.pl
- 如果執行的是
perl -e
或perl -E
一行式perl程序,則$0
的值為-e
或-E
命令行參數ARGV
- perl將perl命令行的參數列表放進數組ARGV(@ARGV)中。既然是數組,就可以訪問($ARGV[n])、遍歷,甚至修改數組元素
- ARGV數組分三種情況收集:
perl x.pl a b c
方式運行時,腳本名x.pl之后的a b c
才會被收集到ARGV數組./x.pl a b c
方式運行時,a b c
才會被收集到ARGV數組perl -e 'xxxxx' a b c
方式運行時,a b c
才會被收集到ARGV數組
- ARGV數組索引從0開始計算,索引0位從腳本名(perl程序名)之后的參數開始計算
- 默認,這些命令行參數是perl程序的數據輸入源,也就是perl會依次將它們當作文件進行讀取
- 參數是有序的,讀取的時候也是有序的
- 需要區分ARGV變量和ARGV數組:
$ARGV
表示命令行參數代表的文件列表中,當前被處理的文件名@ARGV
表示命令行參數數組$ARGV[n]
:表示命令行參數數組的元素ARGV
:表示<>
當前正在處理的文件句柄
例如,test.plx的內容如下:
/usr/bin/perl
print '$ARGV[0] ---> ',$ARGV[0],"\n",
'$ARGV[1] ---> ',$ARGV[1],"\n",
'$ARGV[2] ---> ',$ARGV[2],"\n",
'$ARGV[3] ---> ',$ARGV[3],"\n",
'$ARGV[4] ---> ',$ARGV[4],"\n";
執行這個程序:
shell> ./test.plx -w a b c d
$ARGV[0] ---> -w
$ARGV[1] ---> a
$ARGV[2] ---> b
$ARGV[3] ---> c
$ARGV[4] ---> d
因為是數組,所以可以修改數組,比如強制指定元素:
/usr/bin/perl
@ARGV=qw(first second third);
print '$ARGV[0] ---> ',$ARGV[0],"\n",
'$ARGV[1] ---> ',$ARGV[1],"\n",
'$ARGV[2] ---> ',$ARGV[2],"\n";
shell> ./test.plx a b c d
$ARGV[0] ---> first
$ARGV[1] ---> second
$ARGV[2] ---> third
例如,讀取2個文件(a.log,b.log)的內容:
/usr/bin/perl
while(<>){
print $_;
}
shell> ./test.plx a.log b.log
如果想讀取標准輸入,只需使用"-"作為文件參數即可。
$ echo -e "abcd\nefg" | ./test.plx a.log - b.log
上面將按先后順序讀取a.log,標准輸入(管道左邊命令的輸出內容),b.log。