perlのWebサービスに関するこのquestionをフォローしています。私はメインプログラムからモジュールを読み込んで実行するようになった。動的にモジュールをロードしてperlでメソッドを実行する方法
#!/usr/bin/perl
package NiMbox::perlet::skeleton;
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(%DEFINITION main secondary);
our %DEFINITION;
$DEFINITION{'main'} = {
summary => 'skeleton main',
description => 'long skeleton main description',
args => { 'box' => {}, 'other' => {} }
};
$DEFINITION{'secondary'} = {
summary => 'skeleton secondary',
description => 'long skeleton secondary description'
};
sub main {
print "main...\n";
}
sub secondary {
print "secondary...\n"
}
1;
そして、これらのモジュールの呼び出しは、このように行うことができます:
use NiMbox::perlet::skeleton;
my %DEFINITION = %NiMbox::perlet::skeleton::DEFINITION;
foreach my $s (keys %DEFINITION) {
print "calling sub '$s'\n";
NiMbox::perlet::skeleton->$s();
}
私は道にNiMbox::perlet:skeleton
の直接呼び出しを取り除くでしょうどのようにモジュールの各々は、このようなものですこれは、私は(動作しません。これが、私は何をする必要があるかを示す)このように見える何かができる:
my $perlet = 'skeleton';
use NiMbox::perlet::$perlet;
my %DEFINITION = %NiMbox::perlet::$perlet::DEFINITION;
foreach my $s (keys %DEFINITION) {
print "calling sub '$s'\n";
NiMbox::perlet::$perlet->$s();
}
私は非常に近いですので、私はむしろ欠けているものを見るだろうこの例では別のライブラリを使用するのではなく、何か案は?
ありがとうございました。私が取り除く必要があるのは、最後の 'NiMbox :: perlet :: skeleton'だけです。このようにして、モジュールの名前を変数にすることができ、 'skeleton'パッケージの' main'サブを呼び出す 'docall skeleton main'のように呼び出すことができます。 – rmarimon
'$ class - > $ s()'を使うだけです。 – rmarimon
@rmarimonはい、それは私の見解です。 – Schwern