0

我需要帮助:有没有办法只使用 perl 5.8.8 的核心模块从远程服务器获取文件?File::Fetch 仅从 5.9 开始成为核心模块。

4

3 回答 3

4

这一直出现。看看经典是的,即使您可以使用 CPAN。如果您有能力创建和运行 Perl 脚本,那么您也有能力将模块放在本地目录中并使用它。仅使用核心模块的要求完全是人为的。

在您的情况下,LWP::Simple'getstore()函数将执行您想要的操作。虽然它在技术上不是核心,但LWP::Simple默认情况下包含在许多 Perl 发行版中。你很可能已经拥有它。

更新:那么,您想在 1000 台服务器上执行此操作吗?无需在每台服务器上手动安装模块。 以编程方式使用 CPAN 下载和安装您需要的模块(需要进行一些调整才能让 CPAN 将其安装在本地而不是根模块库中)。Leon Timmermans 建议对模块进行胖包装也是另一种选择。

如果你真的不想这样做,那么基本上答案是否定的:没有简单的方法可以通过 HTTP 获取远程文件,既不使用适当的模块,也不使用系统命令(我没有考虑编写你的自己的 HTTP 客户端是一个简单的方法,但如果它适合你,那很好)

我看到的唯一其他潜在解决方案是解决您的问题的不同方法,例如:

  • 在单个位置使用脚本获取文件,然后通过 FTP 将其分发到所有 1000 台服务器。
  • 或者,将文件放在 FTP 服务器上,然后在每个服务器上使用简单的 Perl 脚本通过 FTP 获取它。
于 2012-12-10T14:36:52.623 回答
2

正如丹已经说过的,是的,即使您也可以使用 CPAN。他的链接没有提到的一种方法是将其编写为使用普通 CPAN 的发行版,然后对其进行fatpack。Fatpacker 将脚本与其所有(纯 perl)依赖项结合起来,创建一个易于分发的文件。

于 2012-12-10T22:19:51.170 回答
1

你可以使用:

my $wgetoutput = `wget "$myFileToGet"`;

反引号 (`) 中的内容将提供给默认 shell,因此您可以在那里调用任何您想要(并且被允许)的东西。警告:$myFileToGet 中可能包含“&& rm -rf *”之类的内容,所以不要忘记清理!

于 2012-12-10T13:57:15.587 回答