http://www.perlmonks.org?node_id=280281


in reply to Cross Platform end of Line characters

Unfortunatly it is the regexp: s/[\r\n]+$//;

T I M T O W T D I

Replies are listed 'Best First'.
Re: Re: Cross Platform end of Line characters
by liz (Monsignor) on Aug 02, 2003 at 15:06 UTC
    Hmmm...

    From perlport:

           A common misconception in socket programming is that "\n"
           eq "\012" everywhere.  When using protocols such as common
           Internet protocols, "\012" and "\015" are called for
           specifically, and the values of the logical "\n" and "\r"
           (carriage return) are not reliable.
    
               print SOCKET "Hi there, client!\r\n";      # WRONG
               print SOCKET "Hi there, client!\015\012";  # RIGHT
    
    Doesn't that apply here as well? Or only if you want to make sure you're script has to be super portable?

    Liz

      Well, yes and no. Mac, Win and Linux all use ASCII, which defines \n to be \012, if the document in question is in a non-ascii format, then a larger conversion than just lineends are probably needed anyway...

      T I M T O W T D I

        The ASCII table has no concecpt of '\n', that's from the C programming language.

        ASCII defines linefeed as \012.

        Unix uses a linefeed as the line terminator in text files, C denoted the linefeed, or new line code as \n. But when Unix was ported to other platforms, it became increasingly important to handle text files from other platforms, with different line terminator / line separator sequencecs.

        --
        TTTATCGGTCGTTATATAGATGTTTGCA

      From my experience writing a client / server application on Win2000 and AIX, your much beeter off using syswrite and sysread to communicate over the socket. This way you don't need to worry about the \n or \r when you transfer your data over the socket using print.