perl:从字符串初始化对象

时间:2011-12-22 19:07:43

标签: perl

我在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 个答案:

答案 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);