use strict;
use warnings;
use Text::CSV;
#,   "Leerzeichen  ",,,   eins zwei , drei,, 'Kuchen, ""mit"" Streussel' , und, "ein, ""x"  , y , /;

# so ziemlich alles, was mir einfaellt
my $test1 = q/,   "Leerzeichen  ",,,   eins zwei , drei,, "Kuchen, /
          . q/""mit"" Streussel" , und, "ein, ""x"  , y , /;

# typische CSV-Zeile
my $test2 = q/SAR001,"","Nevermind, Inc.","John Doe","SZVAB",/
          . q/N,8,1,0,7,"Error, Brain Dumped"/;

# desgleichen mit Leerzeichen
my $test3 = q/SAR001, "", "Nevermind, Inc.", "John Doe", "SZVAB",/
          . q/N, 8 ,1,0    ,7, "Error, Brain Dumped"/;

# ziemlich leere Zeile
my $test4 = q/,/;

# ein neues Objekt erzeugen
my $csv = Text::CSV->new(
             {binary           => 1,  # alle Codes erlauben
              eol              => $\, # Newline Betriebssystem-
                                      # spezifisch setzen
              allow_whitespace => 1,  # Leerzeichen zwischen 
                                      # den Feldern erlauben
              quote_char       => '"',# Anfuehrungszeichen definieren 
              sep_char         => ',',# Feldtrenner definieren
             });

# Dieselben Teststrings wie beim vorhergehenden Programm
my @result = split_string($test1);
print $test1, "\n";
print join('|', @result), "\n\n";

@result = split_string($test2);
print $test2, "\n";
print join('|', @result), "\n\n";

@result = split_string($test3);
print $test3, "\n";
print join('|', @result), "\n\n";

@result = split_string($test4);
print $test4, "\n";
print join('|', @result), "\n\n";

# neue Definition der Funktion
sub split_string
  {
  my $line = shift;
  my @new;
  if ($csv->parse($line))    # Zeile in Felder zerlegen
    {
    @new = $csv->fields();   # Felder als Array abliefern
    return (@new);
    }
  else 
    { 
    # sonst die aktuelle Zeile ausgeben
    print "**** ", $csv->error_input, "\n",
    # und die Fehlerursache (Zahl am Schluß = Fehlerposition)
          "**** ",  $csv->error_diag, "\n"; 
    return (undef);
    }
  }