Perl:为处理表创建一个通用函数将表名作为输入

时间:2013-08-01 08:57:49

标签: perl dbi

我有20个表,我正在尝试将搜索功能添加到我的“模型”中,该模型返回用户在“视图”部分中选择的表的行数。

sub search {
my ( $table, $page_no, $search_value, $where, $order ) =
  @args{qw/table page_no search_value where order/};           
my $option = {};
  if ( defined $order || defined $self->order ) {
     $option->{order_by} = $order // $self->order;
  }      
my @rows = $self->ds->select( $where, $option );
return ( \@rows );
}

不幸的是,我的“ds”方法(它依赖于SQL :: Abstract来进行查询)过于笼统:

 sub ds { DataSource->new(); }

我有特定的模块使用DataSource.pm(我的一般DBI模块)作为父项并指定ds。例如,如果我想修改表A,我需要调用:

 sub ds { DataSource->TableA->new(); }

我的问题是,在这种情况下,我不知道用户想要修改哪个表,因此我不知道$table将采用什么值。我想写一些以$table为输入并给出相应ds的东西。如果$tableTableA,则ds需要变为sub ds { DataSource->TableA->new(); },如果$tableTableB,则ds需要变为sub ds { DataSource->TableB->new(); },依此类推。我怎么能写这个而不依赖于很多条件,我想知道吗?

不幸的是我无法修改ds。我很想依靠滕这个......

1 个答案:

答案 0 :(得分:2)

您可以使用变量调用方法。如果您的表名在$ table中,那么您可以使用。

DataSource->$table->new();