特殊變數 $_ 與 $$ :
先來一個例子吧 :
- #!/usr/bin/perl
- use warnings;
- @array = qw(a b c d);
- foreach (@array) {
- print $_, " ";
- }
其中數組 @array 將其中的元素依次賦值給 $element,但是在上面那個程序中,我並沒有這樣做,在程序中,我就使用到了perl中內置的一個特殊變數 $_!
在程序第五行中 : foreach (@array) 實際上就是等於 foreach $_ (@array). 在這裡,$_是預設是輸入/輸出,因此,如果在程序中有類似的沒有明確聲明的變數位置的時候,就有可能能使用 $_ 代替. 再看另外一個內置變數, 請在命令列下執行下面命令 :
$$ 是當前perl解析器的進程ID(即PID),大家可以將在段程序寫在命令行上,該程序會在 perl 解析器運行5秒後打印出 perl 解析器的進程 PID,大家可以在程序運行期間通過查看進程列表來確定打印結果是否正確.
特殊變數 $! :
接下來是一個用來返回錯誤信息(或是錯誤號)的特殊變數. 請參考命令如下 :
這個命令就是要打開 C 盤 下的一個 none目錄(而實際上我的C盤中並沒有此目錄,之所以這樣寫的目的就是為了引起一個程序中的錯誤信息),如果沒有打開的話,會執行後面的 die qq(can’t open:$!) 在這裡,$! 就指明前次執行錯誤信息的內容.
特殊變數 $/ 與 $. :
來個例子,說一個有意思的特殊內置變數, 參考代碼如下 :
- $text = "C:\\tmp\\test.txt";
- print "Open $text...\n";
- open(FH,$text) or die("Can't open: $!");
- my $line=readline(*FH);
- close FH;
- print $line;
- # Test special variable $/
- print "#=================#\n";
- $/=undef;
- open(FH,$text) or die("Can't open: $!");
- my $line=readline(*FH);
- close FH;
- print $line;
程序的運行結果是 :
程序就不多廢話了,作用就是讀文件而函式 readline(*FH) 的作用是讀取一行文件內容. 但是這裡所說的一行,實際上是有一個標準的,那就是當 perl 在遇到了換行符後,便認為是一行,而換行符預設情況下是由於 $/ 這個特殊變數定義的,是預設值. 也就是說,perl 在每次讀取文件的時候,會先從 $/ 中獲得一個叫做 "分隔符" 的東西,並以該分隔符為標記來讀取文件,如果按預設的 $/ 來說,這個分割符就是一個換行符,所以,預設時,readline() 才會每次讀取一行文本.
在給出的例子中,有這樣一句 : undef $/ ,也就是將$/設置為未定義的值,這樣一來呢,$/ 就不再起作用了,因此,大家可以看到,第二次進行同樣的操作的時候, readline() 就不再是只讀一行而是將文件內容全部讀出來了! 接下來看一個會受到 $/ 影響的內置變數,還是先說實例 :
- $text = "C:\\tmp\\test.txt";
- print "Open $text...\n";
- open(FH,$text) or die("Can't open: $!");
- while(
) - {
- print "line $. is : $_";
- }
- close FH;
可以知道變數 $. 的作用是一個類似計數器的東西. 接著考慮文件 a.txt :
並執行下面程式碼 :
- $text = "C:\\tmp\\a.txt";
- $/=";"; # 注意這裡,這裡我並將 $/ 賦值為分號
- print "Open $text...\n";
- open(FH,$text) or die("Can't open: $!");
- while(
) - {
- print "line $. is : $_\n";
- }
- close FH;
看過這段程序應該就明白 $. 的用法了吧, 接下來再說一個它的特性. 參考代碼如下 :
- $text = "C:\\tmp\\test.txt";
- print "Open $text...\n";
- open(FH,$text) or die("Can't open: $!");
- while(
) - {
- print "line $. is : $_";
- }
- print "\n==========\n";
- print " ", $.;
- close FH;
- print " ", $.;
結果的前三行剛才就已經知道了,這不是我們關心的,我們應該關心的是最後一行結果. $. 變數是具有記憶性的(從原理上來將,它是一個包變數),因此,在關閉文件前打印會發現,它的值是還沒有變化的(這時的值和最後一次讀完文件的值均為3); 而在關閉文件後,該變數便重新初始化為0了
特殊變數 $^O :
再說最後一個用來簡單判斷操作系統類型的,看個例子 :
注意,這裡這個特殊變數 $^O 最後一個字符是字母O,且大寫。 如果是在linux下的話,結果就不是MSWin32了,而是Linux ; 這是一個判斷環境的變數,簡單實用.
其他常用特殊變數 :
perl的內置特殊變數還有很多的,例如常用的還有@_、@ARGV、$ARGV、%INC、%ENV 等等,有很多,不可能一一列舉了,這裡給出一個比較有總結性的列表 :
補充說明 :
* Tutorials Point : PERL readline Function
沒有留言:
張貼留言