work, study, life ..........

Wednesday, April 15, 2009

perl 中变量定义my 和 local的区别

my函数在perl官方文档中,是这样定义的:
* my EXPR
* my TYPE EXPR
* my EXPR : ATTRS
* my TYPE EXPR : ATTRS

A my declares the listed variables to be local (lexically) to the enclosing block, file, or eval. If more than one value is listed, the list must be placed in parentheses.
也就是说my用在封装块,文件,或者是eval中声明局部变量列表用.如果有多于一个变量值的列表, 必须他们放置在圆括号里面.例如在下面的perl中做了全局变量和局部变量的对比:

#/usr/bin/perl
# use warnings;

$x = 10;

test();

sub test{
my $x = 20;
print "The first \$x is $x.\n";
}

print "The second \$x is $x.\n";

显示结果:
The first $x is 20.
The second $x is 10.

在上面的实例中,看到了全局变量$x和局部变量$x的不同值的有效性.

在看看local:
create a temporary value for a global variable (dynamic scoping)

local为全局变量(动态范围)定义.local赋予变量的值在执行时间才有效,也就是为当前的代码块中的变量赋予一个临时值,其值有效性包括当前代码块中含有其他的程序。可以看看下面的perl程序:
#!/usr/bin/perl
#
use warnings;
use strict;

my $x=2;
$_ = "true";
{
my $x = 10;
local $_ = "false";
somesub();
}

somesub();

sub somesub{
print "\$x is $x\n";
print "\$_ is $_\n";
}

显示结果:
$x is 2
$_ is false
$x is 2
$_ is true

尽管有$x = 10 这条语句,但仅仅对从 "my $x = 10;" 到 "somesub();"这块造成影响. 局部变量会考虑它的实际内容,而不是按照顺序执行.所以当我们调用somesub时,其实$x的值还是2.


不过,一般不推荐使用local定义局部变量.

41 comments:

寂寞 said...

Happy New Year 2010........................................

腰痠 said...

我們不是因為快樂而歌唱,而是唱歌使我們快樂..................................................

good said...

對物要珍惜,對事要盡心,對人要感恩。..................................................

宜欣 said...

若對自己誠實,日積月累,就無法對別人不忠了。........................................

林于名 said...

Birth is much but breeding is more. 加油! ........................................

志文志文 said...

Cool blog網愛聊天室色情網站交友找啦咧免費影片成人笑話成人圖庫sexy女同志聊天室愛戀情人用品情趣爽翻天咆哮小老鼠入口85cc6k脫衣人妻sexy85c脫光光taiwansex淫女情色成人男女做愛美女做愛脫衣秀a片正妹淫蕩色情後宮040185c85c77p2p77p2p性幻想手淫18禁

友辰 said...

wonderful...................................................

瑜吟 said...

人間好話,要如海綿遇水牢牢吸住......................................................

BlancaMcleroy1230 said...

文章很棒~感謝!!..................................................

姿婷 said...

Cool blog網愛聊天室色情網站交友找啦咧免費影片成人笑話成人圖庫sexy女同志聊天室愛戀情人用品情趣爽翻天咆哮小老鼠入口85cc6k脫衣人妻sexy85c脫光光taiwansex淫女情色成人男女做愛美女做愛脫衣秀a片正妹淫蕩色情後宮040185c85c77p2p77p2p性幻想手淫18禁

瑋玲 said...

與其爭取不可能得到的東西,不如善自珍惜運用自己所擁有的 ..................................................

韋于倫成 said...

志不立,天下無可成之事。......................................................

韋于倫成 said...

看後受益良多,謝謝∪ˍ∪........................................

韋于倫成 said...

謝謝你的分享,真的太用心了≧﹏≦........................................

家谷 said...

失去金錢的人,失去很多;失去朋友的人,失去更多;失去信心的人,失去所有。.........................

佩GailBohanan1蓉 said...

人生是故事的創造與遺忘。............................................................

hernande said...

愛情是盲目的,但婚姻恢復了它的視力。......................................................

許美玉 said...

Many a true word is spoken in jest...................................................................

向霖 said...

真是太有道理了~~我支持你~~~.................................................................

雅玲 said...

知識可以傳授,智慧卻不行。每個人必須成為他自己。......................................................................

江婷 said...

生存乃是不斷地在內心與靈魂交戰;寫作是坐著審判自己。......................................................................

美方 said...

It takes all kinds to make a world.............................................................

云依恩HFH謝鄭JTR安 said...

It takes all kinds to make a world.............................................................

原秋原秋 said...

支持你就對了!..................................................................

蕙春蕙春 said...

好文章就值得回響,如果可以常常看到您的更新,應該是件很幸福的事情~~............................................................

麗旺麗旺 said...

好地方!下次再來看~~加油!期待............................................................

婷珊 said...

分享是件快樂的事!!感謝您用心的文章!! ............................................................

承蘋承蘋 said...

很以有啟發性的故事阿~感謝大大分享^^......................................................

青卉 said...

thank you so much~~ SUPPORT!!............................................................

莊雅和莊雅和莊雅和 said...

Man proposes, God disposes..................................................................

a云c2v吳c9f8文sagd1 said...

Accept that some days you are the pigeon, and some days you are the statue.............................................................

鄭美玉 said...

人類的聰明,並非以經驗為依歸,而是以接受經驗的行程為依歸。..................................................

文王廷 said...

Pay somebody back in his own coin...................................................................

建邱勳 said...

男女互悅,未必廝守終生,相愛就是美的。............................................................

凱許倫 said...

唯有用熱情、用智慧去觀察事物,這事物才會把他的秘密,洩漏給我們............................................................

枝誠侑誠侑竹 said...

愛情不是慈善事業,不能隨便施捨。......................................................................

蔡曼鄭美玉屏 said...

一個人的價值,應該看他貢獻了什麼,而不是他取得了什麼......................................... ........................

翊翊翊翊張瑜翊翊翊 said...

上來打聲招呼,祝你一切平安!............................................................

建枫 said...

河水永遠是相同的,可是每一剎那又都是新的。..................................................

黃英吳思潔吳思潔邦 said...

我新來的~大家可交個朋友嗎(・ˍ・).....................................................

华瑗泽 said...

河水永遠是相同的,可是每一剎那又都是新的。........................................