0

一些上下文:我有 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)?

4

1 回答 1

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

但请注意,第一部分会加载相关模块。在使用模块之前,您真的应该在其他地方这样做。换句话说,将加载与插入分开。

于 2013-06-14T07:28:38.913 回答