in reply to Re: Converting File Delimiters
in thread Converting File Delimiters

I'm getting an error running the code below

perl -MApp::CCSV -ne "$csv->sep_char('|'); csay @f; $csv->sep_char(','+)" <aaa.txt >pipe.txt

syntax error at -e line 1, at EOF Execution of -e aborted due to compilation errors.

I think it has something to do with the double quotes

Replies are listed 'Best First'.
Re^3: Converting File Delimiters
by afoken (Chancellor) on Aug 10, 2012 at 05:33 UTC
    I think it has something to do with the double quotes

    Yes, and with your shell. As a rule of thumb, you need to quote one-liners with double quotes on Windows, and with single quotes on Unix systems including Linux, *BSD, Mac OS X and the cygwin shell.

    If you use double quotes on Unix, the shell interpolates the quoted string, and because you rarely have an environment variable named "csv", each "$csv" is replaced with an empty string.

    This does not happen on Windows with command.com and cmd.exe, because their quoting rules are, um, different. Strange may be a better word, bug-compatible back to MS-DOS 1.0 describes what actually happens.

    And don't forget that Windows does not expand wildcards for you. This is not a problem with this one-liner, but often you want to use Win32::Autoglob:

    X:\>perl -E "say for @ARGV" *.exe *.exe X:\>perl -MWin32::Autoglob -E "say for @ARGV" *.exe cksum.exe cp.exe cut.exe date.exe sort.exe sum.exe X:\>

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)