访问模块时

Mik*_*ley 1 perl module packages

我有关于包,模块和语法的问题.当你在同一个文件中访问一个包时,我注意到你会使用像......这样的东西.

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

#and to access it using..

package main;
print($test::testVar);
Run Code Online (Sandbox Code Playgroud)

或者只是......

package test;
print($testVar);
Run Code Online (Sandbox Code Playgroud)

然而,当我使用这个语法与模块一起使用,发送一个参数时,我应该从打印函数的开头省略$,但在上面我没有.我注意到它不起作用,我不知道为什么.我的材料没有澄清.

require module;
print(package::sub("argument"));
Run Code Online (Sandbox Code Playgroud)

这是为什么?.我糊涂了.

Dan*_*umb 5

这里的美元符号是一个符号,表示命名变量是标量.

如果没有前面的package声明,则使用$var_name包含隐含的命名空间main,即它的缩写$main::var_name.在你的榜样,那就是你有的情况下,package main;首先,你需要规定的命名空间test,而不是main,那么$test::testVar是必需的.

对于函数调用,您不需要使用sigil.如果你这样做,你会使用ampersand(&),但在调用函数时使用&符号已经不再受许多程序员的青睐.*

和以前一样,sub_name()是...的缩短版本,main::sub_name()以同样的方式,不需要用来调用package::sub().

*参考使用&:

  • tye在第一个链接中的链接是一个很好的总结:http://www.perlmonks.org/?node_id = 29139 (2认同)
  • `$ var_name`中的默认命名空间不是`main`,而是当前的包.`main`就是你在`package`声明出现之前开始的包. (2认同)
  • 您可能理解这一点,但您的回答意味着`$ var_name` _always_表示`$ main :: var_name`,这不是真的.那些不太了解包装的人可能会感到困惑. (2认同)