-1

以下を含むファイルがあります。

foo1 = 1

foo2 =  2

foo3 =    8

.
.
.

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

助けてくれてありがとう、

ヨハド。

4

4 に答える 4

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

重要なのは「e」フラグで、コードを実行して置換を決定できます。(?<...>)構文により読みやすさが向上し、行\K全体を一致させることができますが、値の領域のみを置き換えることができます。「g」フラグは可能な限り置換を繰り返し、「m」フラグは^...$文字列全体ではなく行に一致させます。(正規表現を適用する前に行を分割する場合g、およびはおそらく不要です。)m

于 2009-07-12T13:47:31.833 に答える
2

これが1つです

%h = ("foo1"=>3, "foo2"=>5);
while (<>)
{
    #Substitute value according to expression on right hand side
    s/(\w+) = .*/$1 . " = ". $h{$1}/e;
    print;
}
于 2009-07-12T13:37:14.950 に答える
1

一方通行

%hash = ("foo1"=>33,"foo2" => 44,"foo3"=>99);
while (<>){
  chomp;
  ( $one , $two ) = split /\s+=\s+/, $_;
  print "$one = $hash{$one} \n"
}
于 2009-07-12T13:26:46.897 に答える
0

s/regexPattern/replacementPattern/フラグ

「私はひもです!」

s/\sam/'s/g

「私はひもです!」

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

説明文だけでは何をしているのかよくわかりません。入力と出力のサンプルを提供できますか?

于 2009-07-12T13:28:15.087 に答える