我在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之前打印出字符串,并且使用正确的类名看起来是正确的,每个对象都采用相同的参数,任何想法,谢谢。
答案 0 :(得分:10)
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);