Perl文件更改包之间/内部函数
我正在看一些我们的Perl代码库,并对在某些文件中使用包感到困惑.
我们有一个包含一些有用函数的函数,functions.pl,大致如下: package functions; use strict; sub function_a { # code here } sub function_b { # code here } package main; sub function_c { my ($arguments,$for,$this,$function) = @_; package functions; # Actual function code here. } (显然,功能和包名称已更改.) 这个文件中的函数在require’functions.pl’的其他脚本中使用,然后调用& function_c() – 因为调用function_c的脚本没有声明包,可能它们位于主命名空间中所以不要在调用它时必须在function_c之前添加任何内容. 函数_a和function_b不在此文件之外使用,因此可能将函数_c的主体保留在非主命名空间中意味着其中的代码不必将函数::前置于对它们的任何调用. 有谁知道为什么有人可能会以这种方式编写脚本,而不是将其编写为模块并明确导入某些功能? 而且我知道在Perl中有多种方法可以做到这一点,但是当你感觉像是这样时,包真的应该在一个文件中切换吗? 解决方法
从技术上讲,代码没有任何问题.
package 声明确实可以用来“切换”当前的包.
也就是说,这当然不是标准或一般推荐的方式;正如您所注意到的那样,将脚本转换为module和(可选)export将公共函数转换为使用该模块的命名空间. 多包声明的一个实际用途是在OO代码中,您可能希望在一个文件中定义多个类,例如像这样: package MyClass; # ... MyClass methods here ... package MyClass::Helper { # ... helper class methods here ... } # ... more MyClass methods here ... 或者,在较旧的Perl版本中(< 5.14): package MyClass; # ... MyClass methods here ... { package MyClass::Helper; # ... helper class methods here ... } # ... more MyClass methods here ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |