2011-05-23 102 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