我对 Perl 及其 .lib 功能都很陌生。
我制作了这个简单的子例程并将其保存为扩展名为 .lib 的文件
sub shorterline {
print "Content-type: text/html\n\n";
}
1;
当我尝试将子例程插入下面扩展名为 .cgi 的 Perl 文件时,它不起作用:
#!/usr/bin/perl
require 'mysubs.lib';
&shorterline;
print "Hello, world!";
我给了 .cgi chmod 权限,但 .cgi 仍然不起作用,问题出在哪里?
您对问题所在的描述相当不清楚。
不知何故不起作用
.cgi 仍然无法工作
如果不知道您遇到了什么问题,就很难知道问题是什么。但我尝试复制您的代码并从命令行运行该程序,但收到此错误消息:
无法在 @INC 中找到 mysubs.lib(@INC 包含:...)
所以我认为您正在使用最新版本的 Perl 并且正在遇到 此更改:
从@INC
删除当前目录(“.”)perl 二进制文件在 @INC 中包含一组默认路径。从历史上看,它还包括当前目录(“.”)作为最终条目,除非在启用污点模式(perl -T)的情况下运行。虽然方便,但这具有安全隐患:例如,当脚本在当前目录不受信任(例如 /tmp)时尝试加载可选模块时,它可以从该目录下加载并执行代码。
从 v5.26 开始,“.”默认情况下总是会删除,而不仅仅是在污染下。这对于安装模块和执行脚本具有重大影响。
如果这是问题,那么您可以通过将脚本的目录添加到
@INC
来修复它,如下所示:
use FindBin qw( $RealBin );
use lib $RealBin;
在致电
require
之前。如果这不能解决您的问题,也许您可以考虑分享有关您遇到的问题的更多详细信息。