Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl:从字符串初始化对象_Perl - Fatal编程技术网

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

我有一个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之前打印字符串,它似乎是正确的,具有正确的类名,而且每个对象都采用相同的参数,任何想法,谢谢。

由于字符串可以用作包名,因此
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。