2017-06-19 4 views
-3

文字列 'object'が3回出現するテキストファイルがあります。文字列が出現するたびに異なる文字列に置き換えます。

There is an object on the table 
The object is under the chair 
There might be an object in my pocket 

私は、3つの要素の配列に格納されている別の文字列に「オブジェクト」のすべての発生を置き換えるためにPerlスクリプトを書きたいです。配列の最初の要素は、 'object'の最初の出現に一致し、2番目の要素は2番目の出現に一致します。

例えば、

my @pattern = ("apple", "mango", "orange"); 

その後、出力がでなければならない場合:

There is an apple on the table 
The mango is under the chair 
There might be an orange in my pocket 

答えて

5

ことのperlの便利な機能があります、それは「式を評価すると言う正規表現に/eフラグ、です。

だから、このようにそれを行うことができます:あなたは@patternをINGのshiftだから、あなたが行くように、それは空にするだろうことに注意してくださいが、

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

my @pattern = ("apple","mango","orange"); 

while (<DATA>) { 
    s/object/shift @pattern/eg; 
    print ; 
} 

__DATA__ 
There is an object on the table 
The object is under the chair 
There might be an object in my pocket 

。 (4番目の置換は「未定義」になります)。

しかし、回転パターンを探している場合は、同様のことができます。

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

my @pattern = ("apple","mango","orange"); 
my $hit_count = 0; 

while (<>) { 
    s/object/$pattern[$hit_count++ % @pattern]/eg; 
    print ; 
} 

は、これには、将来のヒットが順番に回転に置換されます、パターンがマッチした回数の累計を保持し、右側の配列要素を選択するために、モジュロ演算子を使用しています。

+3

'pop'の代わりに' shift @ pattern'が必要です。 – Borodin

+0

良い点。私はそれを編集します。 – Sobrique

+0

詳しい返答と説明... – ssr1012

関連する問題