一、Perl中的命令列參數:
Perl提供了一個特殊的內建數組@ARGV來存放使用者從命令列輸入的參數;功能跟C/C++的命令列參數一樣,但是實現上不太一樣;Perl中定義的命令列參數不包含perl命令和perl命令後面的perl程式檔案名稱,即:不包含“perl 程式檔案名稱”,也就是說,數組@ARGV中存放的全都是使用者在命令列上輸入的參數,不包含“perl 程式檔案名稱”;從“ perl 程式檔案名稱”之後開始,到斷行符號鍵之間的參數才會被儲存到數組@ARGV中;$ARGV[0]中存放的是使用者輸入的第一個參數;Perl5把調用程式名儲存在特殊變數$0中;命令列的各個參數之間用空格隔開;
數組@ARGV中的每個儲存單元中存放是命令列中使用空格分隔開的項目;如果命令列上有字串參數,而且字串之間需要有空格的話,這個時候需要使用引號把這些含有空格的字串括起來,否則會被Perl解譯器解釋為多個參數而被存入到數組@ARGV的多個不同的儲存單元中;
在產生數組@ARGV的同時還會組建檔案控制代碼ARGV,以及數組最後單元索引$#ARGV;可以使用迴圈對數組@ARGV進行處理;如果數組@ARGV為空白數組,則數組最後儲存單元的下標索引$#ARGV的值為-1,即:$#ARGV = -1 ;對任意一個空數組來說,都是這樣的:數組最後儲存單元索引的下標為-1;
二、使用<>檔案操作符:
Perl中,<>操作符實際上是對數組@ARGV的隱含的引用,其工作原理為:
1、當Perl解譯器第一次看到<>操作符時,開啟以$ARGV[0]為檔案名稱的檔案;
2、執行動作shift(@ARGV);即把數組@ARGV中的所有元素向前移動一個位置,數組中的元素數量也減1;
3、<>操作符讀取在第一步中開啟的檔案中的所有行;
4 、讀完之後,解譯器回到第一步中重複操作;
可以使用命令列變數作為檔案表處理的簡單文法為如下:
while (<>);
這一行代碼的作用就是開啟和關閉特殊檔案控制代碼ARGV、設定$ARGV變數和讀取檔案中的每一行;使用特殊檔案控制代碼ARGV來處理檔案,確實比較方便,但是也有一定的難度,讀取數組@ARGV中的每一個元素,確定每個值對應的開關和確定何時有檔案需要處理並不容易;
三、檔案的緩衝設定:
預設情況下,Perl解譯器對檔案是使用緩衝的:$I = 0;
為了告訴Perl解譯器不對檔案使用緩衝,可以使用以下方法:
1、使用select()函數選擇一個指定的檔案作為當前預設的檔案;
2、把系統內建的特殊變數 $I設定為1: $I = 1;
系統變數$I會告訴Perl解譯器是否對檔案進行緩衝而不管是否應該進行緩衝;如果$I為非零值,則表示不使用緩衝;如果$I為0值,則表示使用緩衝;系統變數$I與系統變數$~和$^協同工作;當沒有調用select()函數時,$I影響當前預設的檔案;