我的Perl代码似乎不适用于.lib?

时间:2017-11-21 09:15:38

标签: perl cgi lib

我是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仍然无法正常工作,这似乎是什么问题?

1 个答案:

答案 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之前

。如果这不能解决您的问题,也许您会考虑分享您遇到的问题的更多细节。