最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Perl中的特殊內(nèi)置變量詳細(xì)介紹

 更新時(shí)間:2014年05月10日 12:06:45   作者:  
這篇文章主要介紹了Perl中的特殊內(nèi)置變量詳細(xì)介紹,需要的朋友可以參考下

內(nèi)置變量 $_:

先來看一個(gè)例子:

復(fù)制代碼 代碼如下:

#!/usr/bin/perl -w
@array = qw(a b c d);
foreach (@array) {
 print $_," ";
}

例子的作用就是定義一個(gè)數(shù)組并把其中的元素打印出來,這里需要注意的是foreach循環(huán)部分,foreach循環(huán)的標(biāo)準(zhǔn)格式應(yīng)該是:
復(fù)制代碼 代碼如下:
foreach $element (@array){
 ......
}

其中數(shù)組@array將其中的元素依次賦值給$element,但是在上面那個(gè)程序中,我并沒有這樣做,在程序中,我就使用到了perl中內(nèi)置的一個(gè)特殊變量 $_
在程序第五行中 foreach (@array) 實(shí)際上就是等于 foreach $_ (@array),在這里, $_是默認(rèn)是輸入/輸出,因此,如果在程序中有類似的沒有明確聲明的變量位置的時(shí)候,就有可能能使用$_代替

內(nèi)置變量 $$:

復(fù)制代碼 代碼如下:
perl -e "sleep(5);  print qq (The PID of process perl.exe is : $$)"; 
 
這是一句命令行上使用的perl程序,作用就是打印出一段話:print qq(The PID of process perl.exe is : $$) ,在這里,存在著特殊變量$$ ;
$$是當(dāng)前perl解析器的進(jìn)程ID(即,PID),大家可以將在段程序?qū)懺诿钚猩希摮绦驎?huì)在perl解析器運(yùn)行5秒后打印出perl解析器的進(jìn)程ID,大家可以在程序運(yùn)行期間通過查看進(jìn)程列表來確定打印結(jié)果是否正確。

內(nèi)置變量 $!:


接下來是一個(gè)用來返回錯(cuò)誤信息(或是錯(cuò)誤號(hào))的特殊變量。
為了省事,不寫程序了,還是來個(gè)命令行的吧

復(fù)制代碼 代碼如下:
perl -e "opendir FH,'c: one' or die qq (can't open:$!);";

這句話就是要打開C盤下的一個(gè)none目錄(而實(shí)際上我的C盤中并沒有此目錄,之所以這樣寫的目的就是為了引起一個(gè)程序中的錯(cuò)誤信息),如果沒有打開的話,會(huì)執(zhí)行后面的die qq(can't open:$!)
在這里,$!就指明了錯(cuò)誤信息的內(nèi)容,命令行會(huì)返回錯(cuò)誤信息:
復(fù)制代碼 代碼如下:
can't open:No such file or directory at -e line 1.

$!在open或是opendir中用的比較多(無論是打開文件還是管道或是其他)。

來個(gè)例子,說一個(gè)有意思的特殊內(nèi)置變量

復(fù)制代碼 代碼如下:
$text = "C:\test.txt";
{
 open FH,$text or die "can't open:$!";
 my $line = ;
 close FH;
 print $line;
}
print "#===========================# ";
{
 undef $/;
 open FH,$text or die "can't open:$!";
 my $line = ;
 close FH;
 print $line;
}

=================================
C盤下的test.txt的內(nèi)容是:
111111111111111111111111111
222222222222222222222222222
333333333333333333333333333
=================================
好,程序的運(yùn)行結(jié)果是:
111111111111111111111111111
#===========================#
111111111111111111111111111
222222222222222222222222222
333333333333333333333333333

程序就不多廢話了,作用就是讀文件,關(guān)鍵部分在“$line = ”,尖括號(hào)操作符(即,<>)作用是讀取一行文件內(nèi)容(相信大多數(shù)教程或是書上都是這么寫的),但是,這里所說的一行,實(shí)際上是有一個(gè)標(biāo)準(zhǔn)的,那就是當(dāng)perl在遇到了換行符后,邊認(rèn)為是一行,而換行符默認(rèn)情況下是由于$/這個(gè)特殊變量定義的,是缺省值。

也就是說,perl 在每次使用<>操作符讀文件的時(shí)候,會(huì)先從$/中獲得一個(gè)叫做“分隔符”的東西,并以該分隔符為標(biāo)記來讀取文件,如果按默認(rèn)的$/來說,這個(gè)分割符就是一個(gè)換行符,所以,默認(rèn)時(shí),<>操作符才會(huì)每次讀取一行文本。


在給出的例子中,有這樣一句 :undef $/ ,也就是將$/設(shè)置為未定義的值,這樣一來呢,$/就不再起作用了,因此,大家可以看到,第二次進(jìn)行同樣的操作的時(shí)候, <>操作符就不再是只讀一行而是將文件內(nèi)容全部讀出來了。

接下來看一個(gè)會(huì)受到$/影響的內(nèi)置變量,還是先說實(shí)例:

復(fù)制代碼 代碼如下:
$text = "C:\test.txt";
open FH,$text or die "can't open:$!";
while () {
 print "line $. is:$_";
}
close FH;

先來看循環(huán)中的:print "line $. is:$_"
程序的作用是讀文件,并且,將文件逐行賦值給$_(因?yàn)橹挥昧?lt;>操作符而沒有指定內(nèi)賦值變量,因此,默認(rèn)就是賦值給了$_);
但是這里除了$_,還有一個(gè)變量“$.”
我們來看一下結(jié)果:
復(fù)制代碼 代碼如下:
line 1 is:111111111111111111111111111
line 2 is:222222222222222222222222222
line 3 is:333333333333333333333333333

可見,變量$.的作用是一個(gè)類似計(jì)數(shù)器的東西,但是,為什么剛開始我說$.會(huì)受到$/變量的影響呢 ?

將上面的例子稍做修改,再看一下:

復(fù)制代碼 代碼如下:
$text = "C:\test.txt";
undef $/; # 注意,多加了這一行
open FH,$text or die "can't open:$!";
while () {
 print "line $. is:$_";
}
close FH;

第二行多加了一句undef $/; ,上面已經(jīng)說過它的作用了,來看一下這段程序運(yùn)行的結(jié)果:

復(fù)制代碼 代碼如下:
line 1 is:111111111111111111111111111
222222222222222222222222222
333333333333333333333333333

本來應(yīng)該是三行的文本,不但被一次性打印出來,而且還指明了“l(fā)ine 1”(看來程序認(rèn)為這個(gè)文本只有一行),為什么 ?

這是因?yàn)?.變量并不是一個(gè)單純的行計(jì)數(shù)器,確切地說,可以說$.是一個(gè)對(duì)$/計(jì)數(shù)器,我們再來看一段程序大概就會(huì)明白了:

復(fù)制代碼 代碼如下:
$text = "C:\a.txt";
$/ = ";"; # 注意這里,這里我并將$/設(shè)置為未定義,而是給其賦值為分號(hào)
open FH,$text or die "can't open:$!";
while () {
 print "line $. is:$_ ";
}
close FH;

再看一下C盤下的a.txt的內(nèi)容:

復(fù)制代碼 代碼如下:
ddd;bbb;ccc;fff;eee;

就這么簡單了。
看一下運(yùn)行結(jié)果:
復(fù)制代碼 代碼如下:
line 1 is:ddd;
line 2 is:bbb;
line 3 is:ccc;
line 4 is:fff;
line 5 is:eee;

看過這段程序應(yīng)該就明白了吧。

好,$.已經(jīng)講得差不多了,接下來再說一個(gè)它的特性,仍然是看程序說話:

復(fù)制代碼 代碼如下:
$text = "C:\test.txt";
open FH,$text or die "can't open:$!";
while () {
 print "line $. is:$_ ";
}
print " ",$.;
close FH;
print " ",$.;

這個(gè)程序要注意的是最后三行中的兩個(gè)print " ",$.;(一個(gè)是在關(guān)閉文件前,另外一個(gè)則是在關(guān)閉文件后)。
看一下執(zhí)行結(jié)果:
復(fù)制代碼 代碼如下:
line 1 is:111111111111111111111111111
line 2 is:222222222222222222222222222
line 3 is:333333333333333333333333333
3
0

結(jié)果的前三行剛才就已經(jīng)知道了,這不是我們關(guān)心的,我們應(yīng)該關(guān)心的是最后兩行結(jié)果(即兩個(gè)print " ",$.;的結(jié)果);
$.變量是具有記憶性的(從原理上來將,它是一個(gè)包變量),因此,在關(guān)閉文件前打印會(huì)發(fā)現(xiàn),它的值是還沒有變化的(這時(shí)的值和最后一次讀完文件的值均為3);
而在關(guān)閉文件后,該變量又被重新初始化為0了。
這個(gè)特性大家注意一下就可以了,因?yàn)槠渲械脑砩婕暗搅藀erl的作用域和包的一些知識(shí),不是很容易說清楚,所以就不說了,如果對(duì)包和作用域有了解的讀者對(duì)這部分即使我不講他們也應(yīng)該能理解的。

內(nèi)置變量:$^O:

再說最后一個(gè)吧

說一個(gè)用來簡單判斷操作系統(tǒng)類型的,看個(gè)例子:

復(fù)制代碼 代碼如下:
C:>perl -e "print $^O;";
MSWin32

注意,這里這個(gè)特殊變量$^O 最后一個(gè)字符是字母O,且大寫。
如果是在linux下的話,結(jié)果就不是MSWin32了,而是Linux ;
這是一個(gè)判斷環(huán)境的變量,簡單實(shí)用。

您可能感興趣的文章:

相關(guān)文章

  • perl去除重復(fù)內(nèi)容的腳本代碼(重復(fù)行+數(shù)組重復(fù)字段)

    perl去除重復(fù)內(nèi)容的腳本代碼(重復(fù)行+數(shù)組重復(fù)字段)

    perl去除重復(fù)內(nèi)容的小腳本,有需要的朋友可以參考下,包括重復(fù)行、數(shù)據(jù)組中重復(fù)的字段
    2013-03-03
  • perl中單行注釋和多行注釋使用介紹

    perl中單行注釋和多行注釋使用介紹

    在編程時(shí)把一段代碼注釋掉,即通過注釋的方法,使其不能夠運(yùn)行,但是依然存在于代碼中,等以后需要時(shí)再去掉注釋
    2013-03-03
  • 構(gòu)造函數(shù)中Perl方法用法介紹

    構(gòu)造函數(shù)中Perl方法用法介紹

    本文和大家重點(diǎn)討論一下Perl方法的概念,Perl方法定義不提供任何特殊語法,但規(guī)定Perl方法的第一個(gè)參數(shù)為對(duì)象或其被引用的包。Perl有兩種Perl方法:靜態(tài)Perl方法和虛P(yáng)erl方法
    2013-03-03
  • Perl語言的循環(huán)實(shí)現(xiàn)方法小結(jié)

    Perl語言的循環(huán)實(shí)現(xiàn)方法小結(jié)

    Perl語言中提供了多種循環(huán)結(jié)構(gòu),包括for、while、do...while和foreach循環(huán),每種循環(huán)都有其特定的應(yīng)用場景和用法,循環(huán)控制語句如last、next和redo進(jìn)一步提升了循環(huán)的靈活性,通過靈活運(yùn)用這些循環(huán),可以編寫高效而簡潔的代碼,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • perl qw以空格為分隔符問題的解決方法

    perl qw以空格為分隔符問題的解決方法

    perl中創(chuàng)建數(shù)組時(shí),可以使用到qw。但考慮到英文名稱中間的空格等情況就需要單獨(dú)處理了
    2013-03-03
  • Perl語法之解析Perl變量使用

    Perl語法之解析Perl變量使用

    Perl語言有很多值得學(xué)習(xí)的地方,你對(duì)Perl語法中的變量是否熟悉,Perl變量分為標(biāo)量變量,數(shù)組變量,聯(lián)系關(guān)系數(shù)組變量3類
    2013-03-03
  • fdupe 查找重復(fù)文件的Perl腳本代碼

    fdupe 查找重復(fù)文件的Perl腳本代碼

    fdupe 是一個(gè)很小的 Perl 腳本,用來檢索指定目錄并找出其中重復(fù)的文件,該腳本是通過文件內(nèi)容來識(shí)別是否重復(fù)文件,而非文件名。fdupe 無需其他 Perl 腳本支持,運(yùn)行速度非???/div> 2013-03-03
  • perl常問題集合之一

    perl常問題集合之一

    perl常問題集合之一...
    2007-03-03
  • Perl 獲取shell命令的執(zhí)行結(jié)果

    Perl 獲取shell命令的執(zhí)行結(jié)果

    Perl里可以調(diào)用Shell命令,有時(shí)需要根據(jù)shell命令的返回結(jié)果做進(jìn)一步的工作,如何獲得shell的執(zhí)行結(jié)果?
    2008-12-12
  • perl后門,正向和反向!實(shí)例代碼

    perl后門,正向和反向!實(shí)例代碼

    寫過很多關(guān)于Perl編程,今天繼續(xù)分享一篇利用perl后門實(shí)現(xiàn)正向和反向連接的實(shí)例代碼,需要的朋友可以參考下其中的內(nèi)容詳情
    2008-05-05

最新評(píng)論

永胜县| 苍山县| 灵川县| 普安县| 汉川市| 平湖市| 迁安市| 安乡县| 黔南| 大冶市| 南宫市| 保山市| 阜新市| 邻水| 台北县| 分宜县| 繁峙县| 枞阳县| 惠东县| 岚皋县| 行唐县| 海伦市| 泰顺县| 宣城市| 新干县| 瑞丽市| 卢龙县| 陵水| 栾城县| 乌兰察布市| 昌黎县| 巴彦淖尔市| 邯郸县| 琼中| 班玛县| 西城区| 武安市| 陇南市| 历史| 格尔木市| 泸水县|