2

オブジェクト FooBar を動的にロードし、roquet 関数を (動的に) 呼び出す方法について誰か助けてもらえますか? 私はPerlでこのスニペットを持っています:

#!/usr/bin/perl -w 
use Inline Java => << 'End_Of_Java_Code';
class FooBar {
  public FooBar(){}
    public void roquet() {
        System.out.println("HELLO!");
    }
}
End_Of_Java_Code

use Data::Dumper;
use Class::Sniff;
my $sniff = Class::Sniff->new({class=>'FooBar'});
my $num_methods = $sniff->methods;
my $num_classes = $sniff->classes;
my @methods     = $sniff->methods;
my @classes     = $sniff->classes;

my @unreachable = $sniff->unreachable;
foreach my $method (@methods) {
  if ( $method eq "roquet" ) {
    print "$method\n";
  }
}

次のアプローチとバリエーションを試しまし た。アプローチ:

use Module::Load
my $package = "main::FooBar";
load $package;
$package->new();
$package->$rflmethod;//where rflmethod is the variable: $rflmethod='roquet';

b. アプローチ:

no strict 'refs';
use Package::Stash;
my $stash = Package::Stash->new('main::FooBar');
my $coderef = $stash->get_symbol('&__new');
$coderef->()
4

1 に答える 1

0

これは機能します:

my ($class, $method) = qw(FooBar roquet);
my $f = $class->new;
$f->$method;
于 2013-02-10T17:27:26.063 に答える