use 5.18.2; use warnings; use Data::Peek; use Text::CSV_XS qw( csv ); my @f = ("A".."R"); csv (in => "file.csv", headers => \@f, filter => { A => sub { if ($_ eq "2323" && $_{O} ne "AA") { $_[0]->say (*STDERR, [ "ERROR", @_{@f} ]); return 0; } $_ ne "0000" && $_ ne "1111" && $_ ne "2222"; }, O => sub { if ($_ eq "BC") { $_[0]->say (*STDERR, [ "ERROR", @_{@f} ]); return 0; } 1; } }, on_in => sub { $_{D} =~ tr/+=/ /; $_{A} =~ s/^1212$/a/; $_{A} =~ s/^2121$/aa/; $_{A} =~ s/^3131$/ba/; $_{A} =~ m/^(?:6767|9898|5656)$/ && $_{D} =~ m/90 09/ and $_{G} = "AA"; }, );