0

みんな、正規表現を使用して多数のファイルの内容を変更する方法を示す本からこのサンプルコードを持っています。

#!/usr/bin/perl -w
    use strict;
    chomp(my $date = `date`);
    $^I = ".bak";
    while (<>) {
      s/^Author:.*/Author: Randal L. Schwartz/;
      s/^Phone:.*\n//;
      s/^Date:.*/Date: $date/;
      print;
    }

それを見ると、何かが欠けていることがわかります-それはファイル名です。しかし、本は主張します。そのため、自分で試してみると、期待どおりのキーボードからの入力しか受け付けません。だから私は代わりにファイルを開く変更されたコードを持っていますが、それはもうバックアップを作成しません:

この行で処理される

$^I = ".out";



#! usr/bin/perl
use warnings;
use strict;

open (MYFILE,'fewlines');
$^I = ".out";

while (<MYFILE>) {
    s/fred/larry/ig;
    print;
}

この行も同じことを行いますが、コマンド プロンプトで行います。コマンドプロンプト以外でプログラム自体を書きたい

perl -p -i.out -w -e 's/fred/larry/ig' filename

プログラム自体でその行を変換する方法は?

4

1 に答える 1

3

<>は の略で<ARGV>、指定されたファイルが@ARGVあればそれを読み取り、それ以外の場合は STDIN を読み取ります。

perl -p -i.out -w -e 's/fred/larry/ig' filename

する

@ARGV = 'filename';
$^I = '.out'
$^W = 1;
LINE: while (<>) {
   s/fred/larry/ig
} continue {
   die "-p destination: $!\n" unless print $_;
}
于 2013-05-08T05:35:33.240 に答える