第10章 包 名字空間,變量和函數


名字空間,變量和函數就不會把別人的變量和函數搞砸了,反之亦然,名字空間有點像你的家,你的家里想怎么亂都行,

只要你保持你的外部界面對其他公民來說是適度文明就可以了。

在Perl里,一個名字空間叫一個包,包提供了基本的制作塊,在它上面構造更高級的概念,比如模塊和類等。

在OO的說法中,每個對象都屬於一個叫做類的組。在Perl里,類和包以及模塊之間的關系是如此密切,

以至於需要新手經常認為它們是客戶呼喚的,典型的類是用一個定義了與該類同名的包名字的模塊實現的。

Perl里的面向對象的編程是通過引用來實現的,這些引用的引用物知道它們屬於哪些類。

10.1 符號表

一個包的內容總體在一起稱作符號表,符號表都存儲在一個散列里,這個散列的名字和該包的名字相同,

但是后面附加了兩個冒號。因此main符號表的名字是%main::.

因為碰巧也是缺省的包,Perl 把%::當做%main::的縮寫。

因為包是散列,因此你可以找出該包的鍵字然后獲取所有包中的變量。因此該散列的數值都
是類型團,你可以用好幾種方法解引用。比如:
foreach symname(sortkeyslocalsym= main::{symname};  
print “\$
symname is defined\n" if defined $sym; ##解引用標量

print “\@$symname is nonnull\n” if @sym; ##解引用數組

print “\%$symname is nonnull\n” if %sym; ##解引用hash
}

在Perl里,一個名字空間叫一個包。

在面向對象里,每個對象都屬於一個叫做類的組。

Perl里面向對象的編程是通過引用來實現的,

一個獨立命名空間中的變量就是對象的數據 函數就是對象的方法,

所以perl里只需要包package的觀念就可以實現 OO了 不需要特別的類Class,

你把一個package隔離的命名空間叫做“類”也可以 效果類似

所謂的類 對象 只是你在單獨命名空間中操作的變量和函數 這樣應該好理解, 不要再去想其他語言的Class之類的東西 perl沒

朝着生態編程的第一步是: 不要在公園里亂丟垃圾,

當你寫一段代碼時,考慮一下給這些代碼自己的名字空間,這樣你的變量和函數就不會把別人的變量和函數搞砸了,

反之亦然。名字空間有點像你的家,你的家是想怎么亂都行,只要你保持你的外部界面對其它公民說是適度文明就可以了。

在perl里,一個名字空間叫做一個包。包提供了基本的制作塊,在他上面構造更高級的概念,比如模塊和類等。

典型的類是用一個定了與該類同名的包名字的模塊實現的

10.1 符號表

main包內容;

[oracle@jhoa 2] cata2.plforeach key (keys %main::)
{print “$ key=> main::{$key}\n”;}

[oracle@jhoa 2] perla2.pl / => *main::/
stderr=>main::stderr key => *main::key
utf8::=>main::utf8:: ” => *main::”
$CORE:: => *main::CORE::

一個包的內容總體在一起稱做符號表,符號表都存儲在一個散列里,這個散列的名字和該包名字相同,

單手后面附加了兩個冒號。因此main符號表的名字是%main::. 因為main碰巧也是缺省的包,

perl 把%::, 當作%main::的縮寫:

[root@master Webqq]# cat t26.pl
foreach key (keys %::)  
 {print “\$$key =>   $main::{$key}\n”;}  
[root@master Webqq]# perl t26.pl
version:: => *main::version::
/=>main::/ stderr => *main::stderr
$_


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com