为什么我的perl哈希不返回值?

为什么我的perl哈希不返回值?,perl,hash,Perl,Hash,我正在接收CSV文件: "ID","LASTNAME","FIRSTNAME","PERM_ADDR1","PERM_ADDR2","PERM_CITY","PERM_ST","PERM_ZIP","DOB","LIB_TYPE","BARCODE","EMAIL","LOCAL_ADDR1","LOCAL_ADDR2","LOCAL_CITY","LOCAL_ST","LOCAL_ZIP","CAMPUS_ADDR1","CAMPUS_ADDR2","CAMPUS_CITY","CAMPUS_

我正在接收CSV文件:

"ID","LASTNAME","FIRSTNAME","PERM_ADDR1","PERM_ADDR2","PERM_CITY","PERM_ST","PERM_ZIP","DOB","LIB_TYPE","BARCODE","EMAIL","LOCAL_ADDR1","LOCAL_ADDR2","LOCAL_CITY","LOCAL_ST","LOCAL_ZIP","CAMPUS_ADDR1","CAMPUS_ADDR2","CAMPUS_CITY","CAMPUS_ST","CAMPUS_ZIP","DEPARTMENT","MAJOR"
"123","Lastname","Firstname","123 Home St","","Home City","HS","12345-6789","0101","S","1234567890","last.first@domain.local","123 Local St","","Local City","LS","98765-4321","123 Campus St","","Campus City","CS","54321-6789","IT",""
使用
Text::CSV
,我试图将其解析为散列:

my $csv = Text::CSV->new();

chomp(my $line = <READ>);
$csv->column_names(split(/,/, $line));

until (eof(READ)) {
    $line = $csv->getline_hr(*READ);
    my %linein = %$line;
    my %patron;

    $patron{'patronid'} = $linein{'ID'};
    $patron{'last'} = $linein{'LASTNAME'};
    $patron{'first'} = $linein{'FIRSTNAME'};

    print p(%linein)."\n";
    print p(%patron)."\n";
}
我不明白的是为什么
%patron
中的
%linein
中的值没有被填充。我想知道这是否与使用
Text::CSV
有关,因为我在脚本的其他地方解析其他文件,它们工作得很好。但是,这些文件不是CSV文件,而是固定宽度的文件,所以我正在手动解析它们。

试试看

 $csv->column_names(map {/"(.*)"/ and $1} split(/,/, $line))
而不是

 $csv->column_names(split(/,/, $line));
您的CSV密钥被定义为文本字符串

 '"LASTNAME"' ,  '"FIRSTNAME"'
而不仅仅是

 'LASTNAME' ,  'FIRSTNAME'
Data::Printer
在向您展示所发生的事情方面做得并不差-
p(%linein)
中的所有键显示为包含双引号作为
该字符串与
p(%patron)

相反,请尝试使用
use Data::Dumper;打印转储程序(用户%)。如果您能按预期看到输出,那么问题可能在于
p()
子例程。使用您的方法(有效)后,我意识到我还没有完全理解
Text::CSV->column\u names()
方法。在重新阅读CPAN文档之后,我尝试了
$csv->column_names($csv->getline(*READ))
也可以使用,而且它的优点是更容易阅读。谢谢
 'LASTNAME' ,  'FIRSTNAME'