在函數定義中,使用my關鍵字來確保用戶定義函數中所使用的變量名不與任何其它同名的全局變量衝突,它使其後面的變量成爲通常語言所謂的local變量。缺省情況下,perl函數中的變量是全局變量。 local變量先save再store.
如下例:
$x = 9;
sub mm{
print "$x\n";
}
sub gg_my{
my $x = 11;
print "call-my $x\n";
mm;
}
sub gg_local {
local $x = 20;
print "call-local $x\n";
mm;
}
gg_my;
gg_local;
print $x;
運行結果:
call_my 11
9
call_local 20
20
9
my: lexically scoped variable
local:Dynamically scoped variable
內部->外部:
(1)my和local都只在一個block裏有效,出去就失效;
(2)但是local的變量可以繼續在這個block中調用的子程序中存在;
(3)如果有與外界同名的變量,兩者在block退出後都不影響外界同名變量;
外部->內部:
(1)外部設置my、local、缺省均隊內有效,但是同名變量外部my,在block內部local是不允許的。因爲二者在block中調用的子程序中均有效,會衝突。
(2)如果在一個block中有一個my修飾的變量和外界的一個變量同名,而且又需要在這個block中使用外界變量時,兩個辦法:
第一個辦法,用main的package修飾這個變量名,$main::global
第二個辦法,用our修飾,our $global,那麼該block中接下來出現的所有$global都是外界的global
(3)編寫腳本時,注意作用域,防止外部影響內部。