默认情况下,perl在win32环境中打印\ r \n.我怎么能覆盖这个呢?我正在使用perl对存储库中的某些源代码进行一些更改,我不想更改所有换行符.
我尝试更改输出记录分隔符,但没有运气.
谢谢!
编辑:想要包含一个代码示例 - 我正在搜索并替换一些遵循相对简单模式的文件,如下所示:
#!/usr/bin/perl
# test.pl
use strict;
use warnings;
$/ = undef;
$\ = "\n";
$^I=".old~";
while (<>) {
while (s/hello/world/) {
}
print;
}
Run Code Online (Sandbox Code Playgroud)
对于在cmd行上传递的任何文件,这应该用"world"替换"hello"的任何实例.
编辑2:我尝试了最初binmode没有任何运气的建议.我钻了更多,发现(inplace edit特殊变量)覆盖了.任何工作仍然可以使用inplace编辑?$^Ibinmode
编辑3:作为思南低于所指出的,我需要使用binmode ARGVOUT带有$^I代替binmode STDOUT在我的例子.谢谢.
Sin*_*nür 12
"\n"默认情况下,在Windows上打印到文件句柄会发出一个CARRIAGE RETURN("\015")后跟一个LINE FEED("\012")字符,因为Windows上的标准换行符序列.
这是透明的,所以你需要为特殊的文件句柄覆盖它ARGVOUT(参见perldoc perlvar):
#!/usr/bin/perl -i.bak
use strict; use warnings;
local ($\, $/);
while (<>) {
binmode ARGVOUT;
print;
}
Run Code Online (Sandbox Code Playgroud)
输出:
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).