今ログを整形するPerlスクリプトを書いていてはまったこと。
やりたいのは0x????な16進数をシンボルに置き換えるだけ。Perlだとハッシュな対応表から引いてくるだけの簡単なお仕事です。
$_ =~ s/^id = (0x[0-9A-F]{4})/id = $hex2id{\1}/;
これで置き換えできちゃうぞ、簡単簡単と思っていたんですが走らせて見ると変換されない。デバッグプリントで$1を表示してみたら期待通り0x????が取れてる。%hex2idの中身を表示してみてもちゃんと入ってる。なんでだろと思って\を$に変えてみたところ。
$_ =~ s/^id = (0x[0-9A-F]{4})/id = $hex2id{$1}/;
あれ? 表示される。そういえば昔同じところではまった記憶ががが。。。
すっかり忘れてましたが置き換え文字列って正規表現文字列の外なんですよね。今度こそ忘れないようにpostしておきます。しょぼーん。