0

もっと具体的に言ってみましょう。

私はたくさんの wiki ウェブサイトを管理しています。各 Wiki Web サイトには、構成がありますconfigs/wiki_website/wiki_config.pm。この構成ファイルには、各 Web サイトが必要な方法で機能するようにする関数と変数が含まれています。

" " の wiki 設定の例を次に示しますdevs。にあり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。この質問は Web プログラミングとは関係ありませんが、Perl に関する一般的な質問です。

4

1 に答える 1

1

まず、シンボル @ は二重引用符で囲まれた配列として補間されるため、この行は間違っています。

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 に答える