簡體   English   中英

使用Perl Win7為Linux編寫一個文件,只有Linux行結尾

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM