2

这不是我的专业领域,所以我希望提出正确的问题。

我们有一台滚动租赁的服务器。旧服务器是 32 位 windows 服务器,新服务器是 64 位 windows 2008 R2 SP1。

其中一个 Web 应用程序使用 Perl 来运行一些脚本。

  1. 我们可以在新的 64 位机器上运行相同的 32 位版本吗?(例如,如果有相同的版本,但一个是 32 位的,一个是 64 位的,它们本质上是否相同?)
  2. 如果脚本在 32 位版本上运行,它是否仍然可以在 64 位版本的 Perl 下运行?

如果问题需要澄清,请告诉我,我会考虑询问我们团队中的适当人员。

4

3 回答 3

2

如果您担心兼容性,您应该能够在 64 位机器上运行 32 位版本的 perl(假设两者都是 x86)。但是 64 位版本的工作方式应该与 32 位版本大致相同,但有几个例外情况不应该影响脚本。(它们主要与模块中的 C/XS 代码有关。二进制兼容性的东西。这意味着必须为 64 位构建模块。幸运的是,任何不糟糕的 Perl 解释器都会为您完成构建工作*nix 的情况,或者提供一个包管理器,它具有像 ActiveState 这样的预构建模块。)

于 2012-05-08T16:35:30.497 回答
2
  1. 是的,只要您正确重新部署,包括依赖项的构建步骤,您就可以。仅当整个应用程序堆栈都是纯 Perl 时,仅复制文件才有效,这不太可能。— 是的,它们本质上是相同的,但二进制不兼容。
  2. 可能是的。依赖关系可能会出现问题,但是由于 32 位/64 位差异而失败的模块数量很少。
于 2012-05-08T16:32:53.060 回答
2

我认为你的两个问题的答案都是肯定的。32 位应用程序应该在您的 64 位 Windows 上运行良好,但将无法利用任何 64 位功能(如果您想要解析大文件,更大的可用地址空间可能是最重要的) XML 使用 XML::Twig ;-)。

在 32 位 perl 下运行的脚本将在 64 位 perl 上运行,前提是您按顺序获取 64 位 perl 的所有模块,因为它们通常从不同的目录运行。另外,请注意,对于 Windows 上的 64 位 perl,您可能需要 Strawberry perl、ActiveState perl 或类似的。据我所知,Cygwin 只有 32 位。

于 2012-05-08T16:26:21.413 回答