所以我在 Perl 中玩弄一些黑魔法(最终我们都这样做了:-),我对我应该如何做这一切感到有点困惑。这是我的开始:
use strict;
use warnings;
use feature ':5.10';
my $classname = 'Frew';
my $foo = bless({ foo => 'bar' }, $classname);
no strict;
*{"$classname\::INC"} = sub {
use strict;
my $data = qq[
package $classname
warn 'test';
sub foo {
print "test?";
}
];
open my $fh, '<', \$data;
return $fh;
};
use strict;
unshift @INC, $foo;
require $foo;
use Data::Dumper;
warn Dumper(\@INC);
$classname->foo;
我收到以下错误(取决于我的要求行是否被注释掉):
有要求:
Recursive call to Perl_load_module in PerlIO_find_layer at crazy.pl line 16.
BEGIN failed--compilation aborted.
没有:
$VAR1 = [
bless( {
'foo' => 'bar'
}, 'Frew' ),
'C:/usr/site/lib',
'C:/usr/lib',
'.'
];
Can't locate object method "foo" via package "Frew" at crazy.pl line 24.
任何已经知道一些这种黑魔法的巫师:请回答!我很想更多地了解这个奥秘:-)
另请注意:我知道我可以用 Moose 和其他更轻的辅助模块来做这种事情,我主要是在努力学习,所以使用这样那样的模块的建议不会得到我的投票:-)
更新:好的,我想我最初对我的问题不太清楚。我基本上想基于外部数据结构生成一个带有字符串(我将对其进行操作和插值)的 Perl 类。我想从我这里的东西(一旦它工作)到那个应该不会太难。