【问题标题】:How do I load functions from a configs/<site>/wiki_config.pm file into current Perl script?如何将 configs/<site>/wiki_config.pm 文件中的函数加载到当前的 Perl 脚本中?
【发布时间】:2012-06-21 23:29:59
【问题描述】:

让我更具体一点。

我正在维护一堆 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 */
}

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

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

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

【问题讨论】:

  • 一方面,您的示例代码需要更多分号

标签: perl plugins configuration require


【解决方案1】:

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

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

您应该将其更新为:

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

当你像这样存储配置时,它等于 1。 我的 $config = 需要 "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();

【讨论】:

  • 您好,感谢您的更正和答复。但是我的问题是我没有一个“配置”,我每个站点只有一个配置。所以我不能做require config。我在configs/site/wiki_config.pm 有它。此外,服务的各个部分也有许多不同的配置。如configs/site/admin_config.pmconfigs/site/logger_config.pm等。每个路径中的 site 会根据 wiki 更改。有很多 wiki,例如 devsmarketingresearchlabs 等等。
  • 如果您将此答案中的Exporter 内容添加到您的示例中并添加使用import 方法来获取潜艇:no strict 'refs'; my $config = 'dev'; $config-&gt;import(qw(log_file)); print log_file(); 它会起作用。
猜你喜欢
  • 2014-03-02
  • 1970-01-01
  • 2017-10-14
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 2014-05-17
  • 1970-01-01
相关资源
最近更新 更多