2011-12-22 6 views
0

我有一个perl对象库,它们都具有相同的function_calls。 我正在寻找如何从字符串库中创建一个适当的对象。perl:从字符串初始化一个对象

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

如果你需要对象序列化,然后检查了耐储藏::冷冻,耐贮藏::解冻,冻融,或者只是数据::自卸车+评估。 http://www.perlmonks.org/?node_id=8070 – 2011-12-22 21:43:39

回答

9

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