0

我最近不得不从共享帐户迁移到 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 模块(配置、用户、实用程序和 HTML)。但是,这里有些东西不允许使用它们。

文件夹结构如下所示:

  • 登录/index.pl
  • 鞋面/配置.pm

这就是其中一个模块的编写方式:

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

提前谢谢你!

4

1 回答 1

5

问题 #1

包指令说

 package Vamp::Config;

所以你正确使用

 use Vamp::Config;

但这意味着文件必须命名

 Vamp/Config.pm

你说它的名字

 Vamps/Config.pm

问题 #2

对于初学者,

 BEGIN { push @INC, '../'; }

可以更清楚地写成

 use lib '..';

这也更好,因为它将目录放在路径的前面,如果存在则添加相应的arch目录。


in@INC中的相对路径几乎在其他任何地方都被视为相对路径:相对于当前工作目录。您想查看相对于脚本所在目录的路径(而不是相对于当前工作目录的路径),因此您需要提供从该目录构建的绝对路径。

代替

 BEGIN { push @INC, '../'; }    # Buggy

use FindBin qw( $RealBin );
use lib "$RealBin/..";

如果库目录的命名更合理../lib(例如lib/Vamp/Config.pm),那么您可以简单地使用

use mylib;
于 2013-06-13T16:46:42.547 回答