Как я могу распечатать просто новую строку Unix в Perl на Win32?

int и Int32 то же. int псевдоним для Int32.

11
задан Sinan Ünür 23 September 2014 в 17:06
поделиться

5 ответов

Печать «\ n» в дескриптор файла в Windows по умолчанию вызывает ВОЗВРАТ ПЕРЕВОЗКИ ( «\ 015» ), за которым следует символ LINE FEED ( «\ 012» ), потому что это стандартная последовательность новой строки в Windows.

Это происходит прозрачно, поэтому вам нужно переопределить ее для специальный дескриптор файла ARGVOUT (см. perldoc perlvar ):

#!/usr/bin/perl -i.bak

use strict; use warnings;

local ($\, $/);

while (<>) {
    binmode ARGVOUT;
    print;
}

Вывод:

C:\Temp> xxd test.txt
0000000: 7465 7374 0d0a 0d0a                      test....

C:\Temp> h test.txt

C:\Temp> xxd test.txt
0000000: 7465 7374 0a0a                           test..

См. также perldoc open , perldoc binmode и perldoc perliol (спасибо daotoad ).

12
ответ дан 3 December 2019 в 07:12
поделиться

Re: ваш вопрос о том, что binmode теряется, когда $ ^ I открывает новый дескриптор вывода, вы можете решить эту проблему с помощью прагмы open :

use open OUT => ':raw';

, которая заставит все дескрипторы файлов, открытые для записи, иметь слой PerlIO ': raw' ( эквивалент binmode без аргументов) для применения к ним. Просто будьте осторожны, если вы открываете что-нибудь else для вывода, который вы применяете : crlf или любой другой слой по мере необходимости.

1
ответ дан 3 December 2019 в 07:12
поделиться

Данные, которые вы читаете, содержат окончания строк, так что вы снова получаете их. Вы можете удалить их самостоятельно с помощью chomp , а затем добавить свое окончание обратно, если вы установили binmode, как описывает Синан:

while (<>) {
    binmode;
    chomp;        # strip off \r\n
    while (s/search/replace/) {
        # ...
    }
    print;
    print "\n";   # add your own line ending back
}
0
ответ дан 3 December 2019 в 07:12
поделиться

Работает ли binmode (STDOUT) ?

4
ответ дан 3 December 2019 в 07:12
поделиться

Новая строка unix - это символ LINEFEED, который представляет собой код ASCII 10.

print "\ 012";

0
ответ дан 3 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: