我最近不得不从共享帐户转移到VPS,自从我进入VPS后,我无法获得一些我不会再写的Perl脚本了。
主脚本的开头如下:
#!/usr/bin/perl
BEGIN{ push @INC, '../'; }
use CGI qw/:standard *div *form *script/;
use Vamp::Config qw/:site/;
use Vamp::Users;
use Vamp::Utils;
use Vamp::HTML;
use strict;
use warnings;
根据我对Perl的有限知识,我可以说它正在尝试使用一些自定义Perl模块(Config,Users,Utils& HTML)。但是,这里有一些东西不允许使用它们。
文件夹结构如下所示:
这就是其中一个模块的编写方式:
package Vamp::Config;
BEGIN{ push @INC, '../' }
use Exporter;
use strict;
use warnings;
our @ISA = ("Exporter");
our @EXPORT_OK = qw/%DB $HOME_URL $ADMIN_URL $SITE_ROOT/;
our %EXPORT_TAGS = (
database => [qw/%DB/],
site => [qw/$HOME_URL $SITE_ROOT/],
admin => [qw/$ADMIN_URL/]
);
our %DB = (
LIVE => {
DATASOURCE => 'DBI:mysql:vamplets:localhost',
USERNAME => 'example',
PASSWORD => 'example'
},
DEV => {
DATASOURCE => 'DBI:mysql:Vamplets:localhost',
USERNAME => 'example',
PASSWORD => 'example'
},
DEV_ADMIN => {
DATASOURCE => 'DBI:mysql:VampletsAdmin:localhost',
USERNAME => 'example',
PASSWORD => 'example'
},
ADMIN => {
DATASOURCE => 'DBI:mysql:vampletsadmin:localhost',
USERNAME => 'example',
PASSWORD => 'example'
}
);
our $HOME_URL = 'http://www.vamplets.com';
#our $HOME_URL = 'http://localhost/vamplets';
#our $ADMIN_URL = 'http://localhost/vamplets/admin';
our $ADMIN_URL = 'http://www.vamplets.com/admin';
our $SITE_ROOT = "/home/content/13/5396413/html/";
#our $SITE_ROOT = "C:/xampp/htdocs/vamplets/";
我尝试了很多不同的东西,我真的不知道该怎么做了。
我只是不断收到500内部服务器错误。
我知道Perl已经安装并正常运行,因为我已经用它来检查:https://ip-50-63-189-142.ip.secureserver.net/cgi-bin/perldiver/perldiver.pl
先谢谢你了!
答案 0 :(得分:5)
包指令说
package Vamp::Config;
所以你正确使用
use Vamp::Config;
但这意味着文件必须命名为
Vamp/Config.pm
你说它的名字是
Vamps/Config.pm
首先,
BEGIN { push @INC, '../'; }
可以更清楚地写成
use lib '..';
它也更好,因为它将目录放在路径的前面,如果它们存在,它会添加相应的arch目录。
@INC
中的相对路径被视为几乎所有其他地方的相对路径:相对于当前工作目录。您希望查看相对于脚本所在目录的路径(而不是相对于当前工作目录的路径),因此您需要从该目录提供绝对路径构建。
替换
BEGIN { push @INC, '../'; } # Buggy
与
use FindBin qw( $RealBin );
use lib "$RealBin/..";
如果图书馆名称../lib
更明确(例如lib/Vamp/Config.pm
),那么你可以简单地使用
use mylib;