加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:17:55 所属栏目:大数据 来源:网络整理
导读:我正在看一些我们的Perl代码库,并对在某些文件中使用包感到困惑. 我们有一个包含一些有用函数的函数,functions.pl,大致如下: package functions;use strict;sub function_a { # code here}sub function_b { # code here}package main;sub function_c { my (
我正在看一些我们的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 ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读