#!/usr/bin/env perl use strict; use warnings; use Text::CSV; my @transform = ( sub { $_[0] }, sub { "layernumber $_[0]" }, sub { 'datatype ' . join ' datatype ', split /,/, $_[0] }, sub { length $_[0] ? "text $_[0]" : "\b" }, ); my $csv = Text::CSV::->new; while (my $row = $csv->getline(\*DATA)) { $row->[$_] = $transform[$_]->($row->[$_]) for 0 .. $#$row; local $\ = eof ? ";\n" : ",\n"; print "@$row"; } __DATA__ NPLUS,32,0, NW,41,0,1 NWER,51,"0,1,2",12 #### $ pm_1175217_csv_transform.pl NPLUS layernumber 32 datatype 0, NW layernumber 41 datatype 0 text 1, NWER layernumber 51 datatype 0 datatype 1 datatype 2 text 12; $