gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:04:58 25 4
gpt4 key购买 nike

我正在查看我们的一些 Perl 代码库,对 package 的使用感到困惑。在一些文件中。

我们有一个包含一些有用函数的文件,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 的脚本被称为不声明包,想必它们在 main命名空间,所以不必在 function_c 前添加任何内容调用它时。
function_afunction_b不在这个文件之外使用,所以大概保留 function_c的主体回到非主命名空间意味着那里的代码不必添加 functions::给他们的任何电话。

有谁知道为什么有人可能会以这种方式编写需要的脚本,而不是将其编写为模块并显式导入某些函数?

而且我知道在 Perl 中有不止一种方法可以做到这一点,但是是 package真的应该在你喜欢这样的时候在一个文件中切换吗?

最佳答案

从技术上讲,代码没有任何问题。 package 声明确实可以用来“切换”当前的包。

也就是说,这当然不是标准或普遍推荐的方法。正如您所注意到的,这会将脚本变成 module和(可选)export将公共(public)函数放入使用模块的命名空间中。

多个 package 的一种实际用途声明在 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 文件在/内部函数之间更改包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com