Так что я играю с какой-то черной магией в 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 со строкой (которой я буду манипулировать и выполнять интерполяцию) на основе внешней структуры данных. Я полагаю, что переход от того, что у меня есть здесь (когда это работает) к этому, не должно быть слишком сложным.