【问题标题】:Installing JSON.pm on a web host without shell access在没有 shell 访问权限的 Web 主机上安装 JSON.pm
【发布时间】:2012-12-13 08:26:27
【问题描述】:
我的主机 (iPage) 没有安装 JSON.pm。我不想使用他们已安装的模块 (XML) 将数据从 CGI 脚本传输回网页。无论如何我可以使用 JSON 而无需他们在 Perl 上安装它?
我之所以问是因为我注意到当我下载 JSON zip 时,我必须运行 makefile json.pm 命令,但我无法访问 Unix shell 或 SSH 终端。
【问题讨论】:
标签:
json
perl
cpan
perl-module
【解决方案1】:
如果您的 Perl 足够新,5.14 及更高版本,它将附带JSON::PP,这是 JSON 解析器的纯 Perl 实现。令人困惑的是,它没有随 JSON.pm 一起提供。所以试试use JSON::PP 看看它是否有效。
否则,请按照 Ilmari 的指示进行操作。如果您切换到具有 shell 访问权限的主机,则可以使用local::lib 来管理 CPAN 模块。
【解决方案2】:
您应该能够安装pure Perl version of the JSON module 的本地副本而无需外壳访问。只需将.tar.gz 存档下载到您自己的计算机上,解压缩并将lib 子目录下的所有内容复制到您的网络主机上的合适位置。
您还需要告诉 Perl 在哪里可以找到模块,为此您需要知道将模块复制到的文件系统路径。例如,如果您将lib 目录的内容复制到您的网络主机上的/home/username/perl-lib,那么您将在代码中包含以下行:
use lib '/home/username/perl-lib';
use JSON;
根据您的虚拟主机的配置方式,您可能还可以使用$ENV{HOME} 获取您的主目录的路径,以便您可以编写:
use lib "$ENV{HOME}/perl-lib";
use JSON;
或者您可以尝试使用FindBin module 查找包含您的脚本的目录的路径,然后从那里找到lib 目录(请参阅 FindBin 文档中的示例)。