Mail Archives: cygwin/2003/04/03/14:35:47
Hallo Rolf,
Am Mittwoch, 2. April 2003 um 23:03 schriebst du:
> Gerrit P. Haase wrote:
>> Hallo Rolf,
>> Am Dienstag, 1. April 2003 um 18:13 schriebst du:
>>>Gerrit P. Haase wrote:
>>>>Rolf schrieb:
>>>>>So, is this a cygwin perl problem? Or has the stock perl decided
>>>>>to only work with magic ENV variables?
>>>>
>>>>I don't see the problem in the latest Perl (5.9.0) and I'm trying to
>>>>figure out how it can be fixed, in the meantime, please try to use the
>>>>magic PERLIO=perlio setting for your environment.
>>>>Gerrit
>>>Ok, using PERLIO=perlio, but I'm still having a problem (which worked in
>>>the previous version of Perl).
>>>TEST.PL:
>>>1:#!/bin/perl
>>>2:$/ = "\r\n";
>>>3:
>>>4:open( LOG, "<in" ) ||
>>>5: die "Could not open log.\n";
>>>6:binmode LOG, ":crlf";
>>>7:
>>>8:$in = <LOG>;
>>>9:print $in;
>>
>>
>>>in (od -c in):
>>>0000000 a b c \r \n d e f \r \n
>>>0000012
>>
>>
>>>This is on a BINMODE mount. This script outputs "0000000 a b c
>>>\n d e f \n". If I go back to prev Perl, OR remove line#2 OR
>>>remove line#6, then it outputs "0000000 a b c \n"
>>
>>
>> 1. No PERLIO setting:
>>
>> $ od -c in
>> 0000000 a b c \r \n a b c \r \n
>> 0000012
>>
>> $ ./crlf.pl 2>&1 | tee log.in
>> abc
>> abc
>>
>> $ od -c log.in
>> 0000000 a b c \r \n a b c \r \n
>> 0000012
>>
>> 2. PERLIO=perlio:
>>
>> $ export PERLIO=perlio
>>
>> $ ./crlf.pl 2>&1 | tee log.in
>> abc
>> abc
>>
>> $ od -c log.in
>> 0000000 a b c \n a b c \n
>> 0000010
>>
>>
>> 3. PERLIO=raw:
>>
>> $ export PERLIO=raw
>>
>> $ ./crlf.pl 2>&1 | tee log.in
>> abc
>> abc
>>
>> $ od -c log.in
>> 0000000 a b c \n a b c \n
>> 0000010
>>
>> 4. PERLIO=stdio:
>>
>> $ export PERLIO=stdio
>>
>> $ ./crlf.pl 2>&1 | tee log.in
>> abc
>> abc
>>
>> $ od -c log.in
>> 0000000 a b c \n a b c \n
>> 0000010
>>
>> 5. PERLIO=:
>>
>> $ export PERLIO=
>>
>> $ ./crlf.pl 2>&1 | tee log.in
>> abc
>> abc
>>
>> $ od -c log.in
>> 0000000 a b c \r \n a b c \r \n
>> 0000012
>>
>>
>> Gerrit
> Ok, so you get the same results as me. They are both wrong. The script
> should only print the first line.
> I just tried something, I made a file like this: "0000000 a b c
> \r \r \n d e f \r \r \n". Then the perl script shows only
> the first line.
> In 5.6: setting 'binmode LOG, ":crlf";' would set the line-separator to
> "\r\n".
> In 5.8: setting 'binmode LOG, ":crlf";' sets the line-separator to "\r"
> + $/. So, given that I've already set the line-separator to "\r\n" it
> ends up as "\r\r\n" for that file.
> Does anybody have access to a U/Linux machine with perl 5.8 on it? Can
> they run that test script on it? I'd like to know if this is only a
> problem with cygwin-perl or with perl in general.
What about removing line #6 and let Perl do the conversion:
1.
$ export PERLIO=raw
$ ./crlf.pl 2>&1 | tee log.in
abc
$ od -c log.in
0000000 a b c \r \n
0000005
2.
$ export PERLIO=perlio
$ ./crlf.pl 2>&1 | tee log.in
abc
$ od -c log.in
0000000 a b c \r \n
0000005
3.
$ export PERLIO=stdio
$ ./crlf.pl 2>&1 | tee log.in
abc
$ od -c log.in
0000000 a b c \r \n
0000005
4.
$ export PERLIO=
$ ./crlf.pl 2>&1 | tee log.in
abc
abc
$ od -c log.in
0000000 a b c \r \n a b c \r \n
0000012
5.
$ export PERLIO=unix
$ ./crlf.pl 2>&1 | tee log.in
abc
$ od -c log.in
0000000 a b c \r \n
0000005
That is what PERLIO is made for.
See perldoc perlio for the details.
Gerrit
--
=^..^=
--
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/
- Raw text -