我正在开发一个DBIx::Class
用于访问 MySQL 数据库的 Catalyst 应用程序。该应用程序对文件执行数据质量检查。这些文件被加载到一个表中FileContent
:
FILE_ID LINE_NUMBER FOO BAR BAZ
-----------------------------------
1 1 A 99 Blah
1 2 B 11 Blargh
1 3 A 4 Sproing
1 4 B 7 Sproing
1 5 B 10 Doink
然后我有另一个表 ,Format
它定义了每一列的验证操作:
COL_ORDER COL_NAME VALIDATION
1 FOO regex:/^[AB]$/
2 BAR unique_number
3 BAZ regex:/\S/
我想要做的是FileContent
逐行遍历给定文件,将所有规则Format
应用于每一行:
my @lines = $c->model('DB::FileContent')->search({file_id => 1});
my @format = $c->model('DB::Format')->search();
foreach my $line (@lines)
{
foreach my $column (@format)
{
#Get the field matching this column from $line.
#e.g. for first $column get $line->foo()
}
}
但是,我不确定如何最好地从与格式中的当前列匹配的行中有效地获取列。访问列的正常方式是通过方法,例如$line->foo
. foo
但是当是变量时我该怎么办?
我不认为我想这样做:
eval "$line->${$column->col_name}";
我知道 get_column,但这对于从一行中获取单个值是否有效?
$line->get_column($column->col_name)
根据另一个表中的值检索列的最有效方法是什么?我可以使用列名或列位置。在此先感谢您的帮助。