如何将configs / <site> /wiki_config.pm文件中的函数加载到当前的Perl脚本中?</site>

时间:2012-06-19 20:50:14

标签: perl plugins configuration require

让我更具体一点。

我正在维护一堆维基网站。每个wiki网站都有configs/wiki_website/wiki_config.pm的配置。此配置文件包含使每个网站按其工作方式工作的函数和变量。

以下是“devs”的wiki配置示例。它位于configs/devs/wiki_config.pm

package devs;

use warnings;
use strict;


sub log_file {
    return "/var/log/devs/log-%Y-%M-%d.log"
}

sub contact_emails {
    return ("email@gmail.com", "anotheremail@gmail.com")
}

sub public_access {
    1;
}

1;

现在我要做的是在我的Perl脚本中加载此配置:

use warnings;
use strict;

my $site = shift() || die "No site specified!"

my $config = require "configs/$site/wiki_config.pm"

foreach ($config->contact_emails()) {
   /* email contact_email */
}

这不太奏效。我不知道如何在我的Perl脚本中加载configs/$site/wiki_config.pm,以便我可以访问每个站点的配置详细信息。这个问题看起来几乎像你必须有插件。但鉴于我的目录结构,我无法弄明白。

有谁知道如何加载配置文件以便我可以访问其中的函数和变量?

PS。这个问题与网络编程无关,但是对Perl的一般性质疑。

1 个答案:

答案 0 :(得分:1)

首先,这一行是错误的,因为符号@ interpolate是双引号中的数组。

return ("email@gmail.com", "anotheremail@gmail.com"); 

您应该将其更新为:

return ("email\@gmail.com", "anotheremail\@gmail.com");

当你存储这样的配置时,它等于1。     我的$ config = require“configs / $ site / wiki_config.pm”li

<强> CONFIG

package config;
use strict;

require Exporter;
use base qw(Exporter);
use vars qw(@EXPORT @ISA);

@EXPORT = qw(log_file contact_emails public_access);

sub log_file {
    return "/var/log/devs/log-%Y-%M-%d.log"
}

sub contact_emails {
    return ("email\@gmail.com", "anotheremail\@gmail.com")
}

sub public_access {
    1;
}

1;

主要

use strict;
use config;

print contact_emails();