Perl文件更改包之间/内部函数

前端之家收集整理的这篇文章主要介绍了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 ...

猜你在找的Perl相关文章