为了组织Perl中的代码,使用模块(packages),它们在扩展名为 .pm 的单独文件中定义。
use(在编译阶段)和 require(在执行阶段)来连接模块。@INC - 这是Perl查找模块的目录列表。模块示例:
Foo.pm
package Foo; use strict; use warnings; sub say_hello { print "Hello from Foo! "; } 1;
连接和使用:
use lib '.'; # 将当前文件夹添加到 @INC use Foo; Foo::say_hello(); # 输出: Hello from Foo!
主要区别:
use 在脚本开始执行时导入模块,并自动调用 import 方法(如果存在)。require 仅在第一次调用时加载模块。use 和 require之间有什么区别?应在何时使用哪种运算符?
答复:
use— 在编译阶段起作用,自动调用import(通常用于模块)。require— 在执行阶段起作用,当模块名称在执行前未知或不总是需要连接时使用。
故事
在一个大型项目中,通过
require连接了自己的库,忘记了它使用了导出的函数。使用的函数没有被导出,因为require不调用import。结果 — 符号导入不起作用,只能显式调用函数。
故事
将模块移动到单独的文件夹时,忘记通过
use lib添加文件夹路径或修改@INC变量。模块无法找到,脚本结束时出现错误,即使文件在项目的正确位置。
故事
在旧应用程序中,模块名使用小写字母,但通过大写字母调用:
use foo;而不是use Foo;。Perl未找到模块,导致应用程序关键部分的功能受损。