Perl不包括自定义模块

Cha*_*nez 0 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;
Run Code Online (Sandbox Code Playgroud)

根据我对Perl的有限知识,我可以说它正在尝试使用一些自定义Perl模块(配置,用户,实用程序和HTML).但是,这里有一些东西不允许使用它们.

文件夹结构如下所示:

  • 登录/ 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/";
Run Code Online (Sandbox Code Playgroud)

我尝试了很多不同的东西,我真的不知道该怎么做了.

我只是不断收到500内部服务器错误.

我知道Perl已安装并正常工作,因为我用它来检查:https://ip-50-63-189-142.ip.secureserver.net/cgi-bin/perldiver/perldiver.pl

先谢谢你!

ike*_*ami 5

问题#1

包指令说

 package Vamp::Config;
Run Code Online (Sandbox Code Playgroud)

所以你正确使用

 use Vamp::Config;
Run Code Online (Sandbox Code Playgroud)

但这意味着必须命名文件

 Vamp/Config.pm
Run Code Online (Sandbox Code Playgroud)

你说它的名字

 Vamps/Config.pm
Run Code Online (Sandbox Code Playgroud)

问题#2

对于初学者,

 BEGIN { push @INC, '../'; }
Run Code Online (Sandbox Code Playgroud)

可以写得更清楚

 use lib '..';
Run Code Online (Sandbox Code Playgroud)

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


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

更换

 BEGIN { push @INC, '../'; }    # Buggy
Run Code Online (Sandbox Code Playgroud)

use FindBin qw( $RealBin );
use lib "$RealBin/..";
Run Code Online (Sandbox Code Playgroud)

如果库dircetory更明确地命名../lib(例如lib/Vamp/Config.pm),那么你可以简单地使用

use mylib;
Run Code Online (Sandbox Code Playgroud)