怎么使用AutoLoader.pm 和AutoSplit.pm

ganglong99 2012-05-18 03:37:27
现在我要在我的脚本里使用Net::SSH2这个模块,但是里面用到了AutoLoader和AutoSplit。
我没有安装Net::SSH2模块到我的perl lib环境下,而是将它的包解压拷贝到我的项目下的modules目录下,结构如下:

project
| - modules
| - Net
| - SSH2
| - SSH2的相关模块
| - SSH2.pm
| - bin
| - test.pl


然后在脚本test.pl里使用下面的代码来引用Net::SSH2

use lib "../modules";
use Net::SSH2;


但是运行脚本时,出现了编译错误:

Can't locate auto/Net/SSH2/autosplit.ix in @INC (@INC contains: ../modules D:/workspace2/.metadata/.plugins/org.epic.debug D:/workspace2/Integration_Automation/unit-tests D:/tool/perl/site/lib D:/tool/perl/lib .) at D:/tool/perl/lib/AutoLoader.pm line 186.
at ../modules/Net/SSH2.pm line 9
Can't locate loadable object for module Net::SSH2 in @INC (@INC contains: ../modules D:/workspace2/.metadata/.plugins/org.epic.debug D:/workspace2/Integration_Automation/unit-tests D:/tool/perl/site/lib D:/tool/perl/lib .) at ../modules/Common/ProcessChecking.pm line 6
Compilation failed in require at ../modules/Common/ProcessChecking.pm line 6.
BEGIN failed--compilation aborted at ../modules/Common/ProcessChecking.pm line 6.
Compilation failed in require at D:/workspace2/Integration_Automation/unit-tests/test.pl line 13.
BEGIN failed--compilation aborted at D:/workspace2/Integration_Automation/unit-tests/test.pl line 13.


请问这个autosplit.ix是个什么东西,该怎么配置它?
...全文
189 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
I_NBFA 2012-05-19
  • 打赏
  • 举报
回复
看看ExtUtils::MakeMaker之类的发布构建工具,用户安装时会自动扫描模块依赖,
缺少就会给出提示让用户自己装.
fibbery 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
我现在还是想问一下,autosplit.ix这个应该怎么配?
[/Quote]
这个没研究过,你通过安装的方式,肯定没有问题。
fibbery 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
如果我又拷贝一个perl环境到目标机器上,就存在两个perl环境了,是否会有问题?
[/Quote]

你的私有Perl,你需要写个bat批处理程序,,在批处理程序中设置你的私有Perl的环境,就不会有问题了。
ganglong99 2012-05-18
  • 打赏
  • 举报
回复
我现在还是想问一下,autosplit.ix这个应该怎么配?
ganglong99 2012-05-18
  • 打赏
  • 举报
回复
如果我又拷贝一个perl环境到目标机器上,就存在两个perl环境了,是否会有问题?
fibbery 2012-05-18
  • 打赏
  • 举报
回复
我知道你的意思,因为你现在用到的SSH2模块在Perl中不是默认包含的,但是你也不能保证,其他你用的模块在其他计算机上也有。
fibbery 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
但是目标机器上已经有perl环境了,我只需要包含相应的模块就可以了。
[/Quote]

你不能保证你所用的所有模块,都在目标机器上存在。所以,你就必须将Perl作为你发布的内容一起发布。即使是标准的模块,也有版本的差别。比如oracle\hp\ibm的软件,都是包含某一版本的perl一起发布。


ganglong99 2012-05-18
  • 打赏
  • 举报
回复
但是目标机器上已经有perl环境了,我只需要包含相应的模块就可以了。
fibbery 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
但是我的脚本是想做成在任何机器上都可以运行的,所以我要把用到的模块都包含近我的最终脚本包里。否则用户每次要用这个脚本时,就的自己去安装环境,这样使用就很不方便。
[/Quote]

如果你的脚本要在任何机器上运行,你需要将perl与你的脚本一起发布到目标机器上。所以,你需要做一个安装了你所有需要的模块的perl,与你的程序一起发布。
ganglong99 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

安装其实很简单,你的系统需要有C/C++编译器,如果没有,找一个有的机器装好,将Perl再复制到其他机器,就可以用了。
[/Quote]

我想动态引用这些模块,不用安装。。
ganglong99 2012-05-18
  • 打赏
  • 举报
回复
但是我的脚本是想做成在任何机器上都可以运行的,所以我要把用到的模块都包含近我的最终脚本包里。否则用户每次要用这个脚本时,就的自己去安装环境,这样使用就很不方便。
fibbery 2012-05-18
  • 打赏
  • 举报
回复
安装其实很简单,你的系统需要有C/C++编译器,如果没有,找一个有的机器装好,将Perl再复制到其他机器,就可以用了。
fibbery 2012-05-18
  • 打赏
  • 举报
回复
最好下载、编译、安装。而且,不一定一次能安装成功,因为可能会有依赖模块。提示依赖什么,你就装什么就行了。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧