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

前端之家收集整理的这篇文章主要介绍了为什么在使用`do`函数时无法加载Perl库?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是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/html\n\n";
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/html\n\n"; 
print foobar();

猜你在找的Perl相关文章