我是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仍然无法正常工作,这似乎是什么问题?
答案 0 :(得分:0)
您对问题的描述尚不清楚。
它不能以某种方式起作用
.cgi仍无法正常工作
不知道你看到了什么问题,很难知道问题是什么。但我尝试复制代码并从命令行运行程序,我收到此错误消息:
无法在@INC中找到mysubs.lib(@INC包含:...)
所以我认为您使用的是最新版本的Perl并且正在与this change竞争:
从@INC
删除当前目录(“。”)perl二进制文件包含@INC中的一组默认路径。从历史上看,除非在启用了污点模式(perl -T)的情况下运行,否则它还包含当前目录(“。”)作为最终条目。虽然方便,但这具有安全隐患:例如,当脚本尝试在其当前目录不受信任时加载可选模块(例如/ tmp)时,它可以从该目录下加载和执行代码。
从v5.26开始,“。”默认情况下总是被删除,而不仅仅是在污点下。这对安装模块和执行脚本有重大影响。
如果这是问题,那么您可以通过将脚本的目录添加到@INC
来修复它,如下所示:
use FindBin qw( $RealBin );
use lib $RealBin;
在致电require
之前。如果这不能解决您的问题,也许您会考虑分享您遇到的问题的更多细节。