1

この Perl スクリプトはWin7 で実行され、Linuxマシンで読み取られる Clearcase 構成仕様を変更します。Clearcase はその行末について非常にうるさいです。それらは正確かつ \n (0x0A) のみでなければなりませんが、Perl に \n 終わりだけを吐き出させることはできません。通常は \r\n (0x0D 0x0A) になります。

element /somevob/...これは、構成仕様要素の配列に対して実行され、ビットをelement /vobs/somevob/...ファイル ハンドルに変換して出力する Perl スニペットです。

        $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分くらいで終わると思ってた…

4

2 に答える 2

1

:crlfWindows 上の Perl のデフォルトである IO レイヤーに違反しています。binmode後でこのレイヤーを削除するか、:raw(*nix のデフォルト レイヤー) または他の適切な IO レイヤーでファイルハンドルを開くことができます。

サンプル:

$fh = FileHandle->new($FileName, '>:raw')

perldoc open詳細については、IO レイヤーを確認してください。

于 2013-07-11T15:11:16.953 に答える