让我更具体一点。
我正在维护一堆维基网站。每个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的一般性质疑。
答案 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();