[英]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.