加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么在使用`do`函数时无法加载Perl库?

发布时间:2020-12-15 23:26:15 所属栏目:大数据 来源:网络整理
导读:我是Perl的新手,我正在更新一个旧的Perl网站.每个.pl文件似乎都有这一行在顶部: do "func.inc"; 所以我想我可以使用这个文件来标记子程序以供全局使用. func.inc #!/usr/bin/perlsub foobar{ return "Hello world";} index.pl #!/usr/bin/perldo "func.inc"
我是Perl的新手,我正在更新一个旧的Perl网站.每个.pl文件似乎都有这一行在顶部:

do "func.inc";

所以我想我可以使用这个文件来标记子程序以供全局使用.

func.inc

#!/usr/bin/perl
sub foobar
{
    return "Hello world";
}

index.pl

#!/usr/bin/perl
do "func.inc";
print "Content-type: text/htmlnn";
print foobar();

但是,我收到此错误:

Undefined subroutine &main::foobar called at /path/to/index.pl line 4.

这两个文件都在同一个目录中,并且func.inc中已有的音调已在整个网站中使用.但是,该脚本适用于Linux生产环境,但不适用于我的Windows 7开发环境(我正在使用ActivePerl).

更新:

看起来文件没有被包含在内;如果使用绝对路径包含文件,则子工作正常…

do "C:/path/to/func.inc";

…所以看起来相对路径不适用于我的本地开发环境,但它们可以在生产环境中工作.但这对我没有好处,因为我的开发机器上的绝对路径不适用于实时服务器.

如何在Windows 7开发机器上使用相对路径来工作?

更新2:

我正在使用Perl -T开关.不幸的是,这删除了“.”来自@INC,因此阻止我们使用do的相对路径.我删除了此开关,旧代码现在正在运行.我知道这不是好习惯,但不幸的是我正在处理旧代码,所以我似乎别无选择.

解决方法

确保路径正确,使用:

#!/usr/bin/perl 
require("func.inc");
print "Content-type: text/htmlnn"; 
print foobar();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读