名字空間,變量和函數就不會把别人的變量和函數搞砸了,反之亦然,名字空間有點像你的家,你的家裡想怎麼亂都行,
隻要你保持你的外部界面對其他公民來說是适度文明就可以了。
在Perl裡,一個名字空間叫一個包,包提供了基本的制作塊,在它上面構造更進階的概念,比如子產品和類等。
在OO的說法中,每個對象都屬于一個叫做類的組。在Perl裡,類和包以及子產品之間的關系是如此密切,
以至于需要新手經常認為它們是客戶呼喚的,典型的類是用一個定義了與該類同名的包名字的子產品實作的。
Perl裡的面向對象的程式設計是通過引用來實作的,這些引用的引用物知道它們屬于哪些類。
10.1 符号表
一個包的内容總體在一起稱作符号表,符号表都存儲在一個散列裡,這個散列的名字和該包的名字相同,
但是後面附加了兩個冒号。是以main符号表的名字是%main::.
因為碰巧也是預設的包,Perl 把%::當做%main::的縮寫。
因為包是散列,是以你可以找出該包的鍵字然後擷取所有包中的變量。是以該散列的數值都
是類型團,你可以用好幾種方法解引用。比如:
foreach symname(sortkeyslocal∗sym=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裡,一個名字空間叫做一個包。包提供了基本的制作塊,在他上面構造更進階的概念,比如子產品和類等。
典型的類是用一個定了與該類同名的包名字的子產品實作的
main包内容;
[oracle@jhoa 2]cata2.plforeachkey (keys %main::)
{print “$key=>main::{$key}\n”;}
[oracle@jhoa 2]perla2.pl/ => *main::/
stderr=>∗main::stderrkey => *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.plversion:: => *main::version::
/=>∗main::/stderr => *main::stderr
$_