2011-05-23 169 views
1

我有一個關於包,模塊和語法的問題。當你訪問我注意到你使用類似相同的文件包....當訪問模塊

package test; 
$testVar="This is a test"; 

#and to access it using.. 

package main; 
print($test::testVar); 

或者乾脆...

package test; 
print($testVar); 

然而,當我使用這個語法與使用模塊,發送一個參數,我應該從打印函數的開頭省略$,但上面我沒有。我注意到它不起作用,我不知道爲什麼。我的材料沒有澄清。

require module; 
print(package::sub("argument")); 

這是爲什麼?我很困惑。

回答

5

這裏的美元符號是一個印記,表示指定的變量是標量。

如果沒有前面的package聲明,則使用$var_name包含隱含的名稱空間main,即它是$main::var_name的縮寫。在您的示例中,如果您首先有package main;,則需要規定命名空間爲test,而不是main,因此需要$test::testVar

對於函數調用,您不需要使用印記。如果你沒有,你可以使用符號(&),但使用&號時,調用函數已經失寵與很多程序員。*

和以前一樣,sub_name()main::sub_name()縮短版...以同樣的方式,不需要印刷電話號碼package::sub()

*參考,以使用&

+1

&符不以任何形式,形狀或形式棄用。有些人只是不喜歡他們,他們往往是不必要的,使用和不使用()創建一種通常不打算的特殊的子呼叫。最後一點有時被用作反對使用&的一個論點,但我不覺得它有吸引力。 – ysth 2011-05-23 16:43:21

+0

@ysth公平的評論。我已經重新編寫並添加了一些鏈接來擴展這一點。 – Dancrumb 2011-05-23 16:58:06

+0

我有點了解。我想你會說,在模塊的情況下,腳本不在同一個主::符號表中。說實話,我對Perl很陌生,給了我一些問題。 – 2011-05-23 17:18:12