如何在没有太多手动编辑的情况下将长Perl代码拆分成多个文件?

时间:2011-08-07 20:34:43

标签: perl

如何将长Perl脚本拆分为两个或多个可以访问相同变量的不同文件,而无需重命名所有共享变量。 $count$::count(或$main::count哪个相同)?

换句话说,什么是将Perl脚本拆分成多个文件而不必导入大量变量/函数和/或进行大量手动编辑的最佳和最简单的方法。

我认为它与使代码成为相同包/范围/命名空间的一部分有关,但到目前为止我的实验都失败了。

我不确定它是否有所作为,但该脚本用于web / CGI目的,并将在mod_perl下运行。

编辑 - 背景:

我知道我会得到那种回应。我想拆分文件的原因如下:

目前我有一个非常古老且非常长的Perl文件。我知道它不遵循Perl最佳实践,但它有效

问题是,我需要在不同的Web服务器之间分发它使用的数据文件,首先是出于性能原因。将有一个“主”服务器和一个或几个“奴隶”。

大约20%的提到的Perl文件包含共享功能,40%的代码需要在主服务器上运行,40%在从服务器上运行。因此,我想将代码分成三个文件:1。共享,2。仅限master,3。仅奴隶。在主服务器上,将加载1和2,在从站上将加载1和3。

我认为这种方法会使用更少的进程RAM,更重要的是,我会尽量减少不正确拆分代码的风险(例如,一个从属进程调用一个主数据文件)。我不认为对模块化有很大的需求,因为系统可以工作,而且代码不需要与其他项目进行大量的更改或交换。

编辑2 - 解决方案:

找到我在这里寻找的解决方案: http://www.perlmonks.org/?node_id=95813

  

如果主包是变量的所有权,那么   实际的单词'main'可以省略,产生类似:$ :: var

     

可以绕过必须完全限定变量名称   当严格使用时。使用简单地使用vars到您的脚本   变量名称作为参数将绕过显式包   名。

实际上,我最后重复了所需变量的our ($count, etc...)语句,而不是use vars ();

如果我错过了一些重要的事情,请告诉我 - 除了不使用模块! :)

@Axeman,谢谢,我会接受你的回答,无论是为了你的努力还是让我朝着正确的方向前进。

1 个答案:

答案 0 :(得分:5)

除非您在其文件中添加不同的包语句,否则它们将被视为顶部有package main;。因此,假设脚本使用包变量,您不必执行任何操作。如果已使用my声明它们(也就是说,如果它们是词法范围的变量),那么您必须确保对变量的所有引用都在同一个文件中。

但是将脚本拆分为长度是替代模块化。是的,模块化有助于保持代码长度,但模块化如果保持代码长度的正确方法 - 由于所有原因,您希望保持代码长度下降,模块化最好。

如果按长度砍掉文件可能真的适合你,那么你可以创建一个这样的脚本:

do '/path/to/bin/part1.pl';
do '/path/to/bin/part2.pl';
do '/path/to/bin/part3.pl';
...

但我有点怀疑,如果这个代码的组织和你一样糟糕 - 有点 - 表明,它可能会受到一些同样重新发明我在Perl中看到的轮子的影响 - 签名脚本。只是随便(我可能是错的)但我想你会惊讶的是,通过简单地替换比for更好测试的Perl库惯用语 - 循环和while - 可以从长度上砍掉多少一切。