3

$^I条件付きで検索および置換するために、perl スクリプトで使用しました。$^Iバッファ内のファイルのコピーを作成し、バッファの処理後にバッファ全体をファイルに書き戻すか、行編集で行うかを知りたいです。

コードは次のとおりです。

$^I = "";
my $flag = 0;

while ($line = <>) {
    if($line=~ m/some string/i) {
        $flag = 1;
    }
    if(!$flag) {
        $line =~ s/string/replace/g;
    } 
}

print $line;
4

1 に答える 1

8

perlvarから

$INPLACE_EDIT

$^I

inplace-edit 拡張機能の現在の値。インプレース編集を無効にするには、undef を使用します。記憶法: -i スイッチの値。

perlrunから:

-i[拡張子]

<> コンストラクトによって処理されるファイルをその場で編集することを指定します。これは、入力ファイルの名前を変更し、元の名前で出力ファイルを開き、その出力ファイルを print() ステートメントのデフォルトとして選択することによって行われます。拡張子が指定されている場合は、古いファイルの名前を変更してバックアップ コピーを作成するために使用されます。次の規則に従います。

拡張子が指定されておらず、システムがサポートしている場合、元のファイルは名前なしで開かれたままになり、出力は元のファイル名を持つ新しいファイルにリダイレクトされます。perl が正常に終了するかどうかにかかわらず、元のファイルはリンク解除されます。

于 2013-12-27T23:56:20.713 に答える