Perl不包括自定义模块

时间:2013-06-13 16:39:03

标签: perl module perl-module

我最近不得不从共享帐户转移到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)。但是,这里有一些东西不允许使用它们。

文件夹结构如下所示:

  • login / index.pl
  • 鞋面/ Config.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

先谢谢你了!

1 个答案:

答案 0 :(得分:5)

问题#1

包指令说

 package Vamp::Config;

所以你正确使用

 use Vamp::Config;

但这意味着文件必须命名为

 Vamp/Config.pm

你说它的名字是

 Vamps/Config.pm

问题#2

首先,

 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;