2009-06-29 19 views
1

私はハッシュの値から全ての改行(\n)を除去しようとした:ハッシュ値からすべての改行を削除するにはどうしたらいいですか?

my %var_h = ( "ID" => " This is Test 
          This is new line TEST 


          newline Test end "); 

にはどうすれば%var_hの値から、すべての新しい行を削除することができますか?

私はs/\\n//gを試しましたが、うまく動作しませんでした。

+1

私はあなたの問題があなたが欲しくないときにあなたが「エスケープ」していたということを見ています。 (これが質問のタイプミスでない限り) – Telemachus

答えて

13
s:\n::g for values %var_h; 

トリックを行う必要があります。

+0

+1理由のためにステートメント修飾子が存在するので、 –

+0

これは(値がコピーされないという点で)うまくいきましたが、もっと簡単な例でテストしました。 –

+0

@Unknown Google:はい、値はコピーされず、エイリアスにも付けられます。キーはコピーします。 – ysth

4

あなたは何に対して代替を実行していますか?あなただけの値を修正したいように見えるので、私はvaluesキーワードを使用します。

for my $value (values %var_h) { 
    $value =~ s/\n//g; 
} 

(OPの要求で)代替私はそれがはるかに少ないクリアな見つけるのにマップやスライスを使用することです:

@var_h{keys %var_h} = map { s/\n//g } values %var_h; 
+0

ハッシュ値で.. – joe

+0

これを行うには他の方法があります – joe

+0

私は2番目の方法を追加しました。しかし、 'values'を使わないでメソッドを使いたいですか? – Telemachus

3

他のすべての解決策は、ハッシュのすべての値から\ nを削除します。

これが必要かどうかわかりません。

だから、あなたが持っているこのいずれかの値からのみ削除する:

$var_h{'ID'} =~ s/\r?\n//g; 

技術的にはS/\ N // gは十分なはずですが、私は、\ rを追加する習慣がありますか?その前に、それはWindowsスタイルの新しい行も処理します。

+0

それは良い点です。私は1つの値が単なる例であると仮定していました。そして、彼は望ましくない改行を持っていたか持っていなかったかを事前に知ることができなかったでしょう。 – Telemachus

+0

余分な文字はどうやって入りますか? –

+1

エルフ?私は、改行がそこにたどり着いたことをあまり考えなかった。私の頭の上から離れて:悪いユーザー入力、正規表現のキャプチャが間違って、完全なcussednessとプログラマーのエラー。 – Telemachus

関連する問題