+sub _parse_profile {
+ my ($self, %params) = @_;
+
+ my $profile = $params{profile};
+ my $class = $params{class};
+ my $header = $params{header};
+ my $mapping = $params{mapping};
+
+ my @specs;
+
+ for my $col (@$header) {
+ next unless $col;
+ if (exists $mapping->{$col} && $profile->{$mapping->{$col}}) {
+ push @specs, $self->make_spec($col, $profile->{$mapping->{$col}}, $class);
+ } elsif (exists $mapping->{$col}) {
+ push @specs, $self->make_spec($col, $mapping->{$col}, $class);
+ } elsif (exists $profile->{$col}) {
+ push @specs, $self->make_spec($col, $profile->{$col}, $class);
+ } else {
+ if ($self->_csv->strict_profile) {
+ $self->unknown_column($col, undef);
+ } else {
+ push @specs, $self->make_spec($col, $col, $class);
+ }
+ }
+ }
+
+ return \@specs;
+}
+