使用Perl的DBI::CSV模块。解析csv时获取空字符串的未定义

使用Perl的DBI::CSV模块。解析csv时获取空字符串的未定义,perl,csv,perl-module,dbi,Perl,Csv,Perl Module,Dbi,我在Perl中使用DBI::CSV模块来解析我的CSV并对数据运行查询 我的数据是这样的 1001|23|1|loading 1012|25||loading 我希望第二行的第三个字段是未定义的,这是我无法实现的。我得到的字段是一个空字符串,而不是undef,这是我尝试过的一段代码 use strict; use warnings "all"; use Text::CSV_XS; use DBI; my $dbh = DBI->connect( "dbi:CSV:

我在Perl中使用DBI::CSV模块来解析我的CSV并对数据运行查询

我的数据是这样的

1001|23|1|loading  
1012|25||loading  
我希望第二行的第三个字段是未定义的,这是我无法实现的。我得到的字段是一个空字符串,而不是undef,这是我尝试过的一段代码

use strict;  
use warnings "all";  
use Text::CSV_XS;  
use DBI;  
my $dbh = DBI->connect( "dbi:CSV:", undef, undef, {  
                            csv_sep_char    => "|",  
                            f_dir           => ".",  
                            csv_eol         => "\n",  
                            csv_empty_is_undef  => 1,  
                            csv_blank_is_undef  => 1,  
                            csv_quote_char  => undef,  
                            csv_escape_char => undef,  
                            csv_always_quote => undef,  
                            f_ext           => ".csv",  
                            f_enc           => "utf-8",  
                            csv_class       => "Text::CSV_XS",  
                            RaiseError      => 1,  
                            PrintError      => 1  
                            }  
                       );
my @cols = ("col1", "col2", "col3", "col4");
$dbh->{'csv_tables'}{'info'} = { 'file' => "file.csv", col_names => \@cols };
my $result =$dbh->selectall_hashref( "select col1,col2,col3,col4 from info where col1 = 1012", "col1")  

#gives the following result
0  HASH(0x992573c)  
   1012 => HASH(0x9900e90)
  'col1' => 1012
  'col2' => '25'
  'col3' => ''
  'col4' => 'loading'
我希望col3的值在这里是未定义的。
这里的任何帮助我都将不胜感激。谢谢

更换:

$dbh->{'csv_tables'}{'info'} = { 'file' => "file.csv", col_names => \@cols };
与:

结果:

$VAR1 = {
          '1012' => {
                      'col3' => undef,
                      'col1' => '1012',
                      'col2' => '25',
                      'col4' => 'loading'
                    }
        };

您将@cols声明为一个数组,但随后为其分配一个数组引用,即只初始化其第一个元素。请勿将方括号用于数组,仅用于数组引用:

my @cols = ( "col1", "col2", "col3", "col4" );

我已经添加了您的建议,但我仍然得到了与空字符串相同的结果。我运行了您的代码和示例,并得到了您要求的理想输出,因此我不知道您的代码有什么问题,您的上述代码与您正在运行的代码完全相同吗?是的,它完全相同。您看到我的
$result
转储了吗?它将您的代码用于我的次要修复是的,但不确定为什么我没有得到预期的结果
my @cols = ( "col1", "col2", "col3", "col4" );