どのように私は、値の数を変更するために「S ///」演算子を使用することができますか?

StackOverflow https://stackoverflow.com/questions/1116034

  •  12-09-2019
  •  | 
  •  

質問

私が含まれているファイルを持っています:

foo1 = 1

foo2 =  2

foo3 =    8

.
.
.

私は、メモリのハッシュ値の一部にのみ、そのファイル内の値(1,2,8 ...)を交換する必要があり、同じキーを持つもの(foo1は - > 33、foo2は - > 44、foo3。 ...)どのように私は、「S ///」演算子を使用して、それを変更することができますか?他のエレガントな方法は、それを実施することがあれば、私が知っているさせていただきます。

任意の助けてくれてありがとう、

Yohadます。

役に立ちましたか?

解決

片道

%hash = ("foo1"=>33,"foo2" => 44,"foo3"=>99);
while (<>){
  chomp;
  ( $one , $two ) = split /\s+=\s+/, $_;
  print "$one = $hash{$one} \n"
}

他のヒント

my %new_values = ( foo1 => 33, ... );
$data =~ s{^(?<key>\w+) = \K(?<old_value>.+)$}
          {$new_values{$+{key}}}gem;

キーを使用して、交換を決定するためのコードを実行することができます「e」のフラグがあります。 (?<...>)構文は可読性を高め、そして\Kは、私たちはライン全体に一致するだけで値領域を置き換えることができます。 「G」フラグは、できるだけ多くの回数の置換を繰り返し、そして「M」フラグが^...$全体ではなく、文字列の行と一致させます。 (あなたは正規表現を適用する前に、行を分割した場合gmはおそらく不要になります。)

ここに1つの

%h = ("foo1"=>3, "foo2"=>5);
while (<>)
{
    #Substitute value according to expression on right hand side
    s/(\w+) = .*/$1 . " = ". $h{$1}/e;
    print;
}

S / regexPattern / replacementPattern /旗

"私は文字列だ!"

S / \ SAM /さん/グラム

"私は文字列だ!"

http://gnosis.cx/publish/programming/regular_expressions.htmlする

私は本当にあなたがdescriptoinに基づいてやっているのかを理解することはできません。あなたがサンプル入力と出力を提供することができますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top