my $aoh = csv (in => $xFile[$k], headers => "auto", callbacks => { after_parse => sub { $_ ||= 0 for @{$_[1]} }}); #### $ cat test.pl #!/pro/bin/perl use 5.16.2; use warnings; use Text::CSV_XS qw(csv); use Data::Peek; DDumper (csv (in => *DATA, headers => "auto", callbacks => { after_parse => sub { $_ ||= 0 for @{$_[1]} }})); __END__ a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K 11004516,0,0,9,9,3,12477,,,4,,0,,,3,38a947a1,b66b7850,6a14f9b9 11006995,1,,-1,,,,, $ perl test.pl [ { A => 0, B => 0, C => 0, D => 0, E => 0, F => 0, G => 'fbc55dae', H => '9a89b36c', I => '58e67aaf', J => 'f600ec0b', K => 0, a => 11004516, b => 0, c => 0, d => 9, e => 9, f => 3, g => 12477, h => 0, i => 0, j => 4, k => 0, l => 0, m => 0, n => 0, o => 3, p => '38a947a1', q => 'b66b7850', r => '6a14f9b9 11006995', s => 1, t => 0, u => -1, v => 0, w => 0, x => 0, y => 0, z => 0 } ] #### my $csv = Parse::CSV->new ( file => $xFile[$k], header => "auto", names => 1, empty_is_undef => 1, auto_diag => 1, callbacks => { after_parse => sub { $_ ||= 0 for @{$_[1] } }, ));