int
и Int32
то же. int
псевдоним для Int32
.
Печать «\ 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 ).
Re: ваш вопрос о том, что binmode теряется, когда $ ^ I
открывает новый дескриптор вывода, вы можете решить эту проблему с помощью прагмы open :
use open OUT => ':raw';
, которая заставит все дескрипторы файлов, открытые для записи, иметь слой PerlIO ': raw' ( эквивалент binmode
без аргументов) для применения к ним. Просто будьте осторожны, если вы открываете что-нибудь else для вывода, который вы применяете : crlf
или любой другой слой по мере необходимости.
Данные, которые вы читаете, содержат окончания строк, так что вы снова получаете их. Вы можете удалить их самостоятельно с помощью chomp , а затем добавить свое окончание обратно, если вы установили binmode, как описывает Синан:
while (<>) {
binmode;
chomp; # strip off \r\n
while (s/search/replace/) {
# ...
}
print;
print "\n"; # add your own line ending back
}
Новая строка unix - это символ LINEFEED, который представляет собой код ASCII 10.
print "\ 012";