Perl: инициализация объекта из строки - PullRequest
1 голос
/ 22 декабря 2011

У меня есть библиотека объектов в Perl, имеющих одинаковые вызовы function_calls.Я ищу, как создать объект approriate из библиотеки из строки.

my $object_name='myObject';#would actually be a hash lookup from user input with appropriate error checks
my $string = "return ${object_name}->new(\@params);";
my $object = eval $string;
$object->some_function();

Теперь у меня проблема, она работает для одних объектов, а не для других?Есть ли более надежный способ сделать это.Я попытался распечатать строку до eval, и она выглядит правильно с правильным именем класса, также каждый объект принимает один и тот же параметр, любые идеи, спасибо.

1 Ответ

10 голосов
/ 22 декабря 2011

eval не требуется, поскольку в качестве имени пакета может использоваться строка, поэтому строки:

my $object_name = 'myObject';

my $object = $object_name->new(@params);

Будет делать то, что вы хотите. Если вы хотите убедиться, что myObject действительно является допустимым именем пакета, вы можете сделать:

my $object_name = 'myObject';

unless ($object_name->can('new')) {
    die "bad object name: $object_name";
}
my $object = $object_name->new(@params);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...