in reply to Length and Chomp ??

I am not sure why I am getting my length as 6 and not 5.

Sometimes, usually on DOS/Windows boxes, the "newline" from input has length of 2 bytes: CR (carriage return or "\r") and LF (line feed or "\n"). chomp eats both at the same time.

Replies are listed 'Best First'.
Re^2: Length and Chomp ??
by GrandFather (Saint) on Aug 20, 2009 at 02:30 UTC

    Actually Perl converts DOS/Windows newline pairs to/from a single \n during I/O so the rest of the Perl internals need know nothing of the host OS line end conventions.


    True laziness is hard work
Re^2: Length and Chomp ??
by ikegami (Patriarch) on Aug 22, 2009 at 21:20 UTC

    No. The only way chomp would remove two characters is if $/ was two characters long, and $/ is \n by default in Windows.

    >ver Microsoft Windows XP [Version 5.1.2600] >perl -le"print length $/" 1 >perl -le"$,=' '; print map { uc unpack 'H*', $_ } $/=~/./sg" 0A

    The reason this isn't a problem is that the PerlIO layer :crlf is used by default in Windows, and that layer converts CRLF to LF on read and LF to CRLF on write.

    >>foo echo foo >debug foo -rcx CX 0005 : -d100 l5 0B0B:0100 66 6F 6F 0D 0A foo.. -q >perl -le"print length <>" foo 4 >perl -le"$,=' '; print map { uc unpack 'H*', $_ } <>=~/./sg" foo 66 6F 6F 0A

    Builds of Perl without PerlIO (i.e. before 5.8) use the underlying C library, and it does the same thing.