私は、同じインターフェースを共有するパッケージを扱っています。私は正確にクラスのメソッドサブルーチンなく呼び出す必要が文字列を使ってクラスサブルーチンを実行する
#!/usr/bin/env perl
use Modern::Perl;
use Data::Dumper;
use Mod1;
use Mod2;
my $mod = $ARGV[0];
my $meth = $ARGV[1];
${mod}::some_sub;
${mod}::${meth};
:私は、この例のようなもの、すなわち、異なるクラス名に同じサブルーチンを実行する必要があり、それを動的にしたいです。どのように私はこれを達成することができる?最後の2行
ため
Bad name after :: at ./test.pl line 13.
または
Bareword found where operator expected at ./test.pl line 12, near "${mod}::some_sub"
(Missing operator before ::some_sub?)
syntax error at ./test.pl line 12, near "${mod}::some_sub"
Execution of ./test.pl aborted due to compilation errors.
を:私は次のメッセージを表示してスクリプト実行エラーを取得しています、引数 'のMod1 some_sub' でCLIから上記のスクリプトを実行しています Mod1.pmは次のようになります。
package Mod1;
use Modern::Perl;
use Data::Dumper;
sub some_sub {
say Dumper(\@_);
say 'in some_meth';
}
1;
Mod2.pmコードは次のとおりです。
package Mod2;
use Modern::Perl;
use Data::Dumper;
sub other_meth {
say Dumper(\@_);
say 'other';
}
1;
あなたは['eval'](http://perldoc.perl.org/functions/eval.html)を探しているようです。 'eval'では任意の文字列をPerlコードとして実行できます。 – PerlDuck
evalなしで行うことはできますか? –
@PerlDog OPがコマンドラインから引数を受け入れているのでかなり危険です。ディスパッチテーブル(およびおそらくAUTOLOAD)が良いでしょう。 – ThisSuitIsBlackNot