0

让我更具体一点。

我正在维护一堆 wiki 网站。每个 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 */
}

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

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

PS。这个问题与网络编程无关,而是关于 Perl 的一般问题。

4

1 回答 1

1

首先这一行是错误的,因为符号@ interpolate as array in double quotes。

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

您应该将其更新为:

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

当您像这样存储配置时,它等于 1. my $config = require "configs/$site/wiki_config.pm" li

配置

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();
于 2012-06-19T21:30:40.197 回答