[英]Using Perl Win7 to write a file for Linux and having only Linux line endings
这个Perl脚本在Win7上运行 ,修改了将在Linux机器上读取的Clearcase配置规范。 Clearcase非常挑剔它的行结尾,它们必须精确且只有\\ n(0x0A)然而尽量我不能让Perl只吐出\\ n结尾,它们通常会出现\\ r \\ n(0x0D 0x0A)
这是Perl片段,运行在一系列配置规范元素上,并将element /somevob/...
位转换为element /vobs/somevob/...
并打印到文件句柄。
$fh = new FileHandle;
foreach my $line (@cs_array)
{
$line =~ s/([element|load])(\s+\/)(.+)/$1$2vobs\/$3/g;
$line =~ s/[\r\n]/\n/g; # tried many things here
$fh->print($line);
}
$fh->close();
有时,数组中的元素是多行的,并以\\ n分隔
element /vob1/path\nelement\n/vob2/path\nload /vob1/path\n element\n
/vob3/path
load /vob3/path
当我在二进制查看器中查看Win7上编写的文件时,总会有一个0x0D 0x0A换行序列,Linux上的Clearcase抱怨。 这似乎来自印刷品。
有什么建议么? 我以为这将是一个10分钟的工作......
尝试
$fh->binmode;
否则你可能处于文本模式,对于Windows,这意味着\\n
被翻译为\\r\\n
。
您正在运行:crlf
IO Layer,这是Windows上Perl的默认设置。 您可以在事后使用binmode
删除此图层,或者您可以使用:raw
(* nix的默认图层)或第一个位置的其他适当IO图层打开文件句柄。
样品:
$fh = FileHandle->new($FileName, '>:raw')
检查perldoc open
以获取有关IO层的更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.