2011-12-22 7 views
0

私は、同じfunction_callsを持つ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->some_function(); 

問題が発生しました。これは一部のオブジェクトで機能し、他のオブジェクトでは使用できません。これを行うより信頼できる方法がありますか?私はevalの前に文字列を出力しようとしましたが、正しいクラス名で正しいと思われます。また、すべてのオブジェクトは同じパラメータを持ちます。文字列がパッケージ名として使用することができますので、

+0

することは、その後にStorable ::凍結、Storableが::雪解け、FreezeThawに、あるいは単にデータをチェックしてください::ダンパー+評価。 http://www.perlmonks.org/?node_id=8070 –

答えて

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); 
関連する問題