Perl的命令行參數和ARGV

程序名:$0

$0表示當前正在運行的Perl腳本名。有3種狀況:shell

  1. 若是執行方式爲perl x.pl,則$0的值爲x.pl而非perl命令自己
  2. 若是執行方式爲./x.pl,則$0的值爲./x.pl
  3. 若是執行的是perl -eperl -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

由於是數組,因此能夠修改數組,好比強制指定元素:code

/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

若是想讀取標準輸入,只需使用"-"做爲文件參數便可。test

$ echo -e "abcd\nefg" | ./test.plx a.log - b.log

上面將按前後順序讀取a.log,標準輸入(管道左邊命令的輸出內容),b.log。變量

相關文章
相關標籤/搜索