Perl:在目录中搜索包的脚本

时间:2013-06-14 06:50:43

标签: perl

一些上下文:我有csv文件,其中包含使用Text :: CSV_XS移动到数据库的数据。我有大约12张桌子。我正在使用Model / Data.pm DBI包装器模块,它是“Model / Data / Table1.pm”模块的父模块,每个模块代表一个表。如果我想在表1中写一些东西,我需要写一个script.pl,它会做这样的事情:

my $table1_ds = App::Model::Data::Table1->new();
$table1_ds->insert(\@insert_data);
$table1_ds->commit;

我不想为每个表写这个。此外,也许有一天会出现新的表格。

我希望Perl在“Model / Data /”和“get”中搜索包,或者将每个包存储在数据结构中,这样我就可以使用这样的代码:

for each $table_name(@table_names){
  my $table_name_ds = App::Model::Data::$table_name->new();
  $table_name_ds->insert(\@insert_data);
  $table_name_ds->commit;
}

如何创建一个perl脚本来搜索目录中的包并将名称存储在数据结构中(在示例中为@table_names)?

1 个答案:

答案 0 :(得分:1)

假设您使用的是strict(您也应该使用warnings。)

for each $table_name (@table_names){
    no strict 'refs';
    require "App/Model/Data/$table_name.pm";
    my $table_name_ds = "App::Model::Data::$table_name"->new();
    $table_name_ds->insert(\@insert_data);
    $table_name_ds->commit;
}

但请注意,第一部分会加载有问题的模块。在使用模块之前,你真的应该在其他地方做到这一点。换句话说,从插入物中单独加载。