【问题标题】:Importing a library perl script using "require" from remote server使用“require”从远程服务器导入库 perl 脚本
【发布时间】:2019-04-04 05:55:27
【问题描述】:

我有一个名为 /root/kart/test.pl 的库 perl 脚本,这个库脚本作为 main.pl 脚本的一部分被导入。

main.pl的示例内容:

#!/usr/bin/perl

use strict;
use warnings;

if(-f "/root/kart/test.pl" )
{
       require "/root/kart/test.pl";
}
our @array1;
our @array2;

test.pl的示例内容:

#!/usr/bin/perl
our @array1=qw(one two three);
our @array2=qw(abc xyz);
.
.
1;

以前,库 perl 脚本 /root/kart/test.pl 在本地可用,main.pl 工作正常。现在此脚本将仅在远程节点上可用,但在本地不可用。

如何在 perl 中使用 "require" 从远程服务器导入 perl 脚本

【问题讨论】:

  • test.pl 是一个模块(通常具有.pm 扩展名),带有一组子例程等,还是真正的可执行脚本?
  • @zdim 它不是一个模块,只是一个脚本,它只包含具有一些预定义值的数组和变量。
  • How to import a perl script using "require" from remote server in perl? 从服务器导入脚本时收到什么错误信息?
  • @kart1657 如果那个脚本没有真正任何事情,你能不能把它变成一个简单的模块?它会让一切变得更好。然后,您仍然需要将该文件从该远程主机获取到您运行的位置,但是您将处理一个普通模块,该模块可以是 used(或 required,如果您在运行时从使用它的脚本)。
  • 听起来您真正想要的是一个可以存储脚本配置数据的地方。您是否尝试过查看 JSON 对象?语法与 Perl 的 arrayrefs 和 hashrefs 非常相似,它们很容易加载到 Perl 中(参见 JSON on metacpan )。 JSON 是使用 HTTP 请求向服务器发送/从服务器发送的,您可以将数据存储在文本文件中或使用像 CouchDB 这样的专用服务。

标签: perl module


【解决方案1】:

通常,您无法成功require 本地计算机上不存在的任何内容,无论是在内存中还是作为文件。因此,您的问题将围绕如何在远程机器上获得读取权限以及如何将 test.pl 文件中的数据复制到您的机器上。

有一些模块,如 The::Netlazy ,可以为您自动下载、安装和本地使用代码,但由于您的情况对您来说很特殊,您必须自己找到方法将test.pl中的数据复制到本地机器,然后eval它。

也许挂载远程文件系统是最简单的方法。

【讨论】:

  • 只是想补充一点,您不能远程引用模块的原因之一是因为 Perl 中的命名空间直接与文件路径相关联。 Perl 使用一个名为@INC 的特殊变量来存储允许Perl 查找模块的目录。因此,如果您在脚本中有use Foo::Bar; 并且@INC 中的路径之一是'/usr/share/perl',那么Perl 将逐字地查找“/usr/share/perl/Foo/Bar.pm”。如果模块/库/脚本路径不能从 @INC 推断出来,那么你需要告诉 Perl 去哪里寻找,例如 use libFindBin
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 2012-10-28
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多