二、包 Perl程序把變量和子程序的名稱存貯到符號表中,perl的符號表中名字的集合就稱為包(package)。 1、包的定義 在一個程序中可以定義多個包,每個包有一個單獨的符號表,定義語法為: package mypack; 此語句定義一個名為mypack的包,從此以后定義的所有變量和子程序的名字都存貯在該包關聯的符號表中,直到遇到另一個package語句為止。 每個符號表有其自己的一組變量、子程序名,各組名字是不相關的,因此可以在不同的包中使用相同的變量名,而代表的是不同的變量。如:
$var = 14; package mypack; $var = 6; 第一個語句創建變量$var并存貯在main符號表中,第三個語句創建另一個同名變量$var并存貯在mypack包的符號表中。 2、在包間切換 在程序里可以隨時在包間來回切換,如:
1: #!/usr/local/bin/perl 2: 3: package pack1; 4: $var = 26; 5: package pack2; 6: $var = 34; 7: package pack1; 8: print ("$var\n"); 運行結果如下:
$ program 26 $ 第三行定義了包pack1,第四行創建變量$var,存貯在包pack1的符號表中,第五行定義新包pack2,第六行創建另一個變量$var,存貯在包pack2的符號表中。這樣就有兩個獨立的$var,分別存貯在不同的包中。第七行又指定pack1為當前包,因為包pack1已經定義,這樣,所有變量和子程序的定義和調用都為該包的符號表中存貯的名字。因此第八行對$var的調用為pack1包中的$var,其值為26。 3、main包 存貯變量和子程序的名字的缺省符號表是與名為main的包相關聯的。如果在程序里定義了其它的包,當你想切換回去使用缺省的符號表,可以重新指定main包: package main; 這樣,接下來的程序就好象從沒定義過包一樣,變量和子程序的名字象通常那樣存貯。 4、包的引用 在一個包中可以引用其它包中的變量或子程序,方法是在變量名前面加上包名和一個單引號,如:
package mypack; $var = 26; package main; print ("$mypack'var\n"); 這里,$mypack'var為mypack包中的變量$var。 注意:在Perl 5中,包名和變量名用雙冒號隔開,即$mypack::var。單引號引用的方式仍然支持,但將來的版本中未必支持。
|