我的 Perl 代码似乎无法与 .lib 一起使用?

问题描述 投票:0回答:1

我对 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 仍然不起作用,问题出在哪里?

perl cgi
1个回答
0
投票

您对问题所在的描述相当不清楚。

不知何故不起作用

.cgi 仍然无法工作

如果不知道您遇到了什么问题,就很难知道问题是什么。但我尝试复制您的代码并从命令行运行该程序,但收到此错误消息:

无法在 @INC 中找到 mysubs.lib(@INC 包含:...)

所以我认为您正在使用最新版本的 Perl 并且正在遇到 此更改

从@INC

删除当前目录(“.”)

perl 二进制文件在 @INC 中包含一组默认路径。从历史上看,它还包括当前目录(“.”)作为最终条目,除非在启用污点模式(perl -T)的情况下运行。虽然方便,但这具有安全隐患:例如,当脚本在当前目录不受信任(例如 /tmp)时尝试加载可选模块时,它可以从该目录下加载并执行代码。

从 v5.26 开始,“.”默认情况下总是会删除,而不仅仅是在污染下。这对于安装模块和执行脚本具有重大影响。

如果这是问题,那么您可以通过将脚本的目录添加到

@INC
来修复它,如下所示:

use FindBin qw( $RealBin );
use lib $RealBin;

在致电

require
之前。如果这不能解决您的问题,也许您可以考虑分享有关您遇到的问题的更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.