我是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();