如果启动一个perl模块,我不确定它是否以及它有什么不同
package MYPACKAGE;
use 5.12.0;
use warnings;
# functions are here
1;
Run Code Online (Sandbox Code Playgroud)
要么
use 5.12.0;
use warnings;
package MYPACKAGE;
# functions are here
1;
Run Code Online (Sandbox Code Playgroud)
或者如果这些use ...
都不被认为是因为它们use ...
是从调用perl脚本继承而来的.
这个问题可能归结为:是否值得use ...
在模块中指定它们,或者如果我在perl脚本中指定它们就足够了.
实用模块具有词汇,而非动态范围.
版本pragma会激活当前作用域中的某些功能,具体取决于版本.它不会全局激活这些功能.这对于向后兼容性很重要.
这意味着可以在模块定义之外激活pragma,但在我们的范围内:
# this is package main
use 5.012; # activates `say`
package Foo;
say "Hi"; # works, because lexical scope
Run Code Online (Sandbox Code Playgroud)
这与导入当前包(!=范围)的普通导入不同.
该warnings
pragma激活当前范围内的警告.
但是,每个文件都应该包含use strict
,因为词法范围永远不会跨越文件.语用库不是传递性的:
Foo.pm:
say "Hi";
1;
Run Code Online (Sandbox Code Playgroud)
main.pl:
use 5.012;
require Foo;
Run Code Online (Sandbox Code Playgroud)
失败.
凡正是你把这些编译因此在很大程度上变得无关紧要.我建议package
在文件中有多个名称空间之前放置编译指示,例如
use 5.012; use warnings;
package Foo;
...;
package Bar;
...;
1;
Run Code Online (Sandbox Code Playgroud)
但要放第package
一个,如果它是文件中唯一的一个.
package Foo;
use 5.012; use warnings;
...;
1;
Run Code Online (Sandbox Code Playgroud)
唯一重要的是你做到use
了;-)
归档时间: |
|
查看次数: |
477 次 |
最近记录: |