Subject: RE: Cygwin 1.3.2-1 Problems with CR/LF in Perl
From: "Gerrit P. Haase" <[email-masked]>
To: <[email-masked]>
Date: Wed, 22 Aug 2001 19:41:10 +0200

> Troy Noble schrieb am 2001-08-22 10:48:

>So binmode(F1); or binmode(F2); didn't fix the behavior,
>even on textmode mount?

Yes, that's the workaround, but you will still have to fix
every unixscript which should handle files on textmounts.

The test script looks like that then:
=====================================
#!/usr/bin/perl -w
use strict;

rename("file2.txt","file1.txt");
open(F1,"file1.txt");
open(F2,">file2.txt");

binmode(F1);
binmode(F2);

while(<F1>) {
    # have to use chomp; chop; print F2 $_ . "\n"; to get it to work
    print F2;
}
close(F1);
close(F2);

>Just curious.  I know it's not a real fix, but is a
>potential work-around.  I suppose I could go try it
>for myself.

It works with my latest build and so should do the TRIAL release
from last year.

>The reason I mention it is that perldoc perlfunc says:

$ perldoc -f binmode

>"""
>binmode FILEHANDLE
>   Arranges for the file to be read or written in 
>``binary'' mode in operating systems that distinguish 
>between binary and text files. Files that are not in 
>binary mode have CR LF sequences translated to LF on 
>input and LF translated to CR LF on output. Binmode 
>has no effect under many sytems, but in MS-DOS and 
>similarly archaic systems, it may be imperative--otherwise 
>your MS-DOS-damaged C library may mangle your file. The 
>key distinction between systems that need binmode() 
>and those that don't is their text file formats. 
>Systems like Unix, MacOS, and Plan9 that delimit lines 
>with a single character, and that encode that character 
>in C as "\n", do not need binmode(). The rest may need 
>it. If FILEHANDLE is an expression, the value is taken 
>as the name of the filehandle. 
>
>If the system does care about it, using it when you 
>shouldn't is just as perilous as failing to use it 
>when you should. Fortunately for most of us, 
>you can't go wrong using binmode() on systems 
>that don't care about it, though.
>"""
>
>Troy
>
>-----Original Message-----
>From: Gerrit P. Haase [mailto:[email-masked]]
>Sent: Wednesday, August 22, 2001 10:29 AM
>To: [email-masked]
>Subject: Re: Cygwin 1.3.2-1 Problems with CR/LF in Perl
>
>
>>Charles Wilson schrieb am 2001-08-22 11:33:
>
>>Go to the cygwin-apps mailing list archives and look at the last few 
>>days.  Hopefully there is a new perl coming soon that addresses your 
>>problems; it should be available as a test version in the next few days. 
>>  Once it is, PLEASE test it, Gavin.  None of "us" use text mounts...
>> 
>>--Chuck
>
>No, unfortunately not, there are no changes to that issue.
>I just tested the little example below, if used on a textmount,
>there are \r's added to every line, so after the script
>runs one time, a textfile is converted from \n to \n\r and everytime
>it runs, one more \r is added.
>It seems at this state, perl does the right job only on binmode mounts.
>
>>Walker, Gavin (CMIS, ANU - Acton) wrote:
>> 
>>>Hi,
>>>I've been trying to write a perl script to edit a text file.  The cut
>>>down version of it is a little further down.  It's pretty simple, read a
>>>file in and dump it out.  My problem is that successive runs creates a
>>>string of CR on each line.  Every time I run it another CR is added.  To get
>>>rid of them I have to
>>>use chomp, then chop and append my own \n.  Perl appears to be reading the
>>>CR/LF characters separately and then out as CR/CR/LF.  This is supposed to
>>>work on unix as well so I can't go chopping unnecessarily.  Running the same
>>>program under DOS (probably using windows' perl) doesn't cause any problems. 
>>>Perl version is 5.6.1 for cygwin.  On installation I told cygwin to use Dos
>>>text format (cvs handles the dos/unix interchange).
>>>
>>>Gavin Walker
>>>Canberra, Australia
>>>
>>>#!perl -w
>>>use strict;
>>>
>>>rename("file2","file1");
>>>open(F1,"file1");
>>>open(F2,">file2");
>>>while(<F1>) {
>>>    # have to use chomp; chop; print F2 $_ . "\n"; to get it to work
>>>    print F2;
>>>}
>>>close(F1);
>>>close(F2);

-- 
[email-masked]

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/