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

W3C*_*der 0 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的内容

当严格使用时,可以绕过必须完全限定变量名称.将一个简单的使用变量应用于您的脚本,使用变量名称作为参数将获得显式包名称.

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

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

@Axeman,谢谢,我会接受你的回答,既是为了你的努力,也是为了让我朝着正确的方向前进.

Axe*_*man 5

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

但是将脚本分割成长度是模块化的一种腐败替代品.是的,模块化有助于保持代码长度,但是如果保持代码长度合适的正确方法,则模块化 - 由于您希望保持代码长度减小的所有原因,模块化最好.

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

do '/path/to/bin/part1.pl';
do '/path/to/bin/part2.pl';
do '/path/to/bin/part3.pl';
...
Run Code Online (Sandbox Code Playgroud)

但我有点怀疑,如果这个代码的组织和你一样糟糕 - 有点 - 表明,它可能会遭受一些同样的重新发明我在Perl无知脚本中看到的轮子.只是随便(我可能是错的)但我想你会惊讶的是,通过简单地替换经过更好测试的Perl库成语而不是for-looping和while-ing所有内容,可以从长度上切断多少.