【问题标题】:Perl: A script that searches for packages inside a directoryPerl:在目录中搜索包的脚本
【发布时间】:2013-06-14 06:50:42
【问题描述】:

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

【问题讨论】:

    标签: perl


    【解决方案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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 2022-07-31
      • 1970-01-01
      • 2013-04-10
      • 2013-09-26
      • 1970-01-01
      • 2020-04-29
      • 2010-12-27
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多