Perl selectall_array - 从数组 ref 的数组中检索所有数据

Perl selectall_array - retrieve all data from array of array ref

我正在使用 DBI selectall_array 从 mysql 中获取所有数据。我的查询 returns 每行 1 列。但是 selectall_array 函数 returns 如下所列的每一行的数组引用数组

$VAR1 = [
          '1.ptmp'
        ];
$VAR2 = [
          'e1.ptmp'
        ];
$VAR3 = [
          's2.ptmp'
        ];
$VAR4 = [
          'sw1.ptmp'
        ];
$VAR5 = [
          'w1.ptmp'
        ];

我想要的是一种将所有域提取到单个数组(无引用)中的方法,或者是否有 DBI 函数 returns 没有任何引用的完整数据数组?我不想遍历所有数据或在 while 循环中执行 fetchrow_array。如果可能,是否正在寻找一条语句来完成所有操作?

请看下面我的代码:

my @mysqldata = $dbh->selectall_array('SELECT `domain` FROM dfs WHERE `id` IN ('.join(',',('?')x(scalar(@params))).')', {}, @params);
my @minus = array_minus( @all, @mysqldata );

您可以像这样在一行中将 arrayrefs 解引用到一个大数组中:

my @all = map {@$_} $dbh->selectall_array($sql);

map 块将 @$_ 应用于 selectall_array 返回的每一行,这取消了对数组引用的引用。

由于您只提取一列,因此您可以尝试 selectcol_arrayref() 方法 - 内联取消引用数组。

my @mysqldata = @{ $dbh->selectcol_arrayref('SELECT `domain` FROM dfs WHERE `id` IN ('.join(',',('?')x(scalar(@params))).')', {}, @params) };

更新

正如 ysth 在评论中所建议的那样,您可以在较新版本的 Perl(v5.20.0 及更高版本)中使用后缀运算符来取消引用 selectcol_arrayref() 返回的值 - 如下所示。

$dbh->selectcol_arrayref('SELECT domain FROM dfs', undef, @params)->@*;