perl:从字符串初始化对象
我有一个perl对象库,所有对象都具有相同的函数调用。 我正在寻找如何从一个字符串库中创建一个合适的对象perl:从字符串初始化对象,perl,Perl,我有一个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
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之前打印字符串,它似乎是正确的,具有正确的类名,而且每个对象都采用相同的参数,任何想法,谢谢。由于字符串可以用作包名,因此
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);
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);
如果需要对象序列化,请查看Storable::freeze、Storable::thaw、FreezeThaw或Data::Dumper+eval。如果需要对象序列化,请查看Storable::freeze、Storable::thaw、FreezeThaw或Data::Dumper+eval。