#!/usr/bin/env perl

use Text::CSV;
use Getopt::Long   qw/ GetOptionsFromArray :config pass_through /;
use warnings;
use strict;

my $usage = "usage: $0 [-e] < file.csv\n";

exit main( @ARGV );


sub main
{
  my $escape = 0;

  GetOptionsFromArray( \@_, 'escape' => \$escape ) or die $usage;

  my $csv = Text::CSV->new( { binary => 1 } );
  my $in = \*STDIN;

  while (my $row = $csv->getline( $in )) {
    @$row = map c_escape($_) => @$row if $escape;
    print join("\t" => @$row) . $/;
  }

  $csv->eof or $csv->error_diag();

  return 0;
}


sub c_escape
{
  my $str = shift;
  my %escapes =
  (
    "\\" => "\\\\",
    "\n" => "\\n",
    "\t" => "\\t",
  );
  $str =~ s/([\\\n\t])/ $escapes{$1} /ge;
  return $str;
}