作为Perl的新手而不是动态语言,我对如何不直接管理模块感到有些惊讶.
当然,cpan X理论上确实有效,但我正在从三个不同的机器和操作系统(在工作中,在家里,在外部环境中测试)开发相同的项目.
cpan因为我们的防火墙使ftp无法使用cpan为以非root用户身份运行目前我还是无法在Windows下安装模板.我已经看到,作为一种替代方案,我可以编译它,我也尝试过ActiveState的PPM,但模块不存在.
现在,我的困惑在于Perl是一种动态语言.我在工作时遇到了所有这些问题,例如,在C中,我必须为所有平台编译所有库,但我认为使用Perl的方法与Python或PHP的方法非常类似.复制模块在目录中并导入它的情况的百分比只是起作用.
所以,我的问题是:如果Perl的模块是用Perl编写的,为什么复制/粘贴方法不起作用?如果必须编译某些(或部分)模块,如何在CPAN中查看模块是否仅为Perl还是依赖于编译库?是不是有办法下载模块(tar,zip ...)并使用cpan来部署它?这将解决我在Windows下的问题.
bri*_*foy 10
现在,Perl是一种动态语言,但这并不意味着人们编写的所有内容都可以跨平台移植.那不是语言的错.这甚至都不是程序员的错.有些东西,比如Win32 :: OLE,不适用于Unix.:)
其他动态语言会有一些相同的问题.如果必须编译C代码,则无法仅将文件复制到另一台计算机.某些发行版根据您的操作系统等配置代码略有不同.
即使您可以复制文件,也必须确保复制所需的所有文件.你知道特定模块需要的一切吗?请记住,他们中的许多人都有依赖关系.
你遇到的大多数问题与语言没有任何关系.你在使用这些工具时遇到了麻烦.如果您想要一个为您做出所有决定的零配置CPAN工具,请尝试使用cpanminus.你得到的东西大多是相同的cpan(尽管代码不同),但它会为你做出所有的决定.它不会运行任何分发测试,而是安装到您的用户目录中.当你需要一些能让你控制的东西时,请回过头来cpan.
在外部环境(Linux CentOs)中,它可以在几个小时后工作,因为我没有 root 访问权限,我必须配置 cpan 以非 root 用户身份操作
这是了解这个技巧很有帮助的时候之一。在本例中, local::lib允许您在大约三分钟内配置非 root 安装区域和所有 ENV 变量。
如果perl的模块是用perl编写的,为什么复制/过去的方法不起作用?
有些是用纯 Perl 编写的,但许多是部分用 C 编写的(使用 Perl 的 XS API)以提高效率。
有时您最终会遇到JSON::XS、JSON::PP和JSON::Any等情况,以自动选择已安装的最佳版本。
有没有办法下载模块(tar、zip...)并使用 cpan 来部署它?
cpan 程序就是从互联网上获取东西。您可以下载该软件包(CPAN页面右侧会有一个“下载:CGI.pm-3.49.tar.gz”的链接),解压它,然后
perl Makefile.PL
make
make install
您可能最好将 cpan 安装配置为仅使用 HTTP 源(在urllist配置选项中)。可能会在您的网络中创建一个迷你 CPAN 镜像。