Aynı arabirimi paylaşan bir grup paketle çalışıyorum. Ben bu örnekte olduğu gibi, yani bir şey farklı sınıf isimlerine aynı alt programı çalıştırır ve dinamik olmak için gereken:Sınıf alt yordamını yürütmek için dize kullanılıyor
#!/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};
Ben tam çağrı altprogramlar ve bir sınıf yöntem gerekir. Bunu nasıl başarabilirim? zaman bir sonraki mesaj ile komut yürütme hatası alıyorum argümanların Mod1 some_sub 'ile CLI Yukarıdaki scriptinizi ediyorum: Geçen 2 hat
için
Bad name after :: at ./test.pl line 13.
veya
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.pm şunun gibi görünür:
package Mod1;
use Modern::Perl;
use Data::Dumper;
sub some_sub {
say Dumper(\@_);
say 'in some_meth';
}
1;
Ve Mod2.pm kodunun yanında:
package Mod2;
use Modern::Perl;
use Data::Dumper;
sub other_meth {
say Dumper(\@_);
say 'other';
}
1;
['eval'] (http://perldoc.perl.org/functions/eval.html) aramayı bekliyorsunuz. "Eval" ile Perl kodu olarak keyfi dizeleri çalıştırabilirsiniz. – PerlDuck
Değerlendirmeden yapmak mümkün mü? –
@PerlDog OP, komut satırından argümanları kabul ettiği için oldukça tehlikeli olurdu. Bir sevk tablosu (ve muhtemelen AUTOLOAD) daha iyi olurdu. – ThisSuitIsBlackNot